组合两个数组以形成每个项目的一对[重复]
Posted
技术标签:
【中文标题】组合两个数组以形成每个项目的一对[重复]【英文标题】:Make a combination of two arrays to form a pair of each item [duplicate] 【发布时间】:2019-10-25 19:05:37 【问题描述】:我有两个大小为 3 的数组 array1 和大小为 2 的 array2。我希望从两个数组中形成一对每个项目。那就是;
int array1[] = 1, 2, 3;
int array2[] = 9, 4;
我希望达到的结果: 1 , 9 1 , 4 2 , 9 2 , 4 3 , 9 3 , 4
这是我尝试过的:
#include <iostream>
using namespace std;
int main(int argc, const char *argv[])
int array1[] = 1, 2, 3;
int array2[] = 9, 4;
int arrayOneSize = sizeof(array1);
int arrayTwoSize = sizeof(array2);
for (size_t i = 0; i < arrayOneSize; i++)
for (size_t j = 0; j < arrayTwoSize; j++)
cout << array1[i] << " , " << array2[j] << endl;
return 0;
但由于某种原因,我得到了一大堆奇怪的组合,例如: 1,9 1,4 1,1 1,2 1,3 1,1029505037 1,-531587312 ...(真的很长,只是想把结果缩短一点) 0,-411331072 1,9 1,4 1,1 1,2 1,3 1,1029505037 1,-531587312 1,-411331072
对不起,菜鸟问题。我还是 C++ 的新手,所以我很乐意感谢任何帮助。还有为什么我得到不属于数组的数字?
提前致谢。
【问题讨论】:
int arrayOneSize = sizeof(array1);
==> int arrayOneSize = sizeof(array1) / sizeof(*array1);
***.com/questions/37538/…
sizeof
不是元素的数量。
可能不是那么明显,但是这个问题非常相似,并且接受的答案显示了一个通用的解决方案,您也可以在这里应用***.com/questions/13788114/cross-product-in-c
感谢您的快速回复
【参考方案1】:
要获取数组中元素的数量,您必须将其大小除以其中元素的大小:
int arrayOneSize = sizeof(array1) / sizeof(array1[0]);
int arrayTwoSize = sizeof(array2) / sizeof(array2[0]);
正如Jarod42 指出的那样,您可以将range-based for loop 用于数组并绕过手动查找大小。
或者,考虑使用std::array
,或者更好的是std::vector
。这是现代 C++ 的实现:
#include <iostream>
#include <vector>
int main()
std::vector vec1 1, 2, 3 ; // no need for <int> with C++17
std::vector vec2 9, 4 ;
for (auto&& e1 : vec1)
for (auto&& e2 : vec2)
std::cout << e1 << " , " << e2
<< '\n'; // no need to flush the buffer all the time
【讨论】:
顺便说一句,for-range 也可用于int array1[] = 1, 2, 3;
你知道有什么 STL 算法可以做到这一点吗?感觉像很多样板
@WalidJabari std::size
这样做。
我指的是生成所有可能排列的部分
@wal 再看一遍,next_permutation 在这里并不适合。不过,您始终可以编写自己的函数。【参考方案2】:
数组的大小(每个数组中的元素数)计算存在问题。
int arrayOneSize = sizeof(array1);
int arrayTwoSize = sizeof(array2);
这将是元素的数量* sizeof(int),它给出了总大小。由于您只对元素的数量感兴趣,因此您应该这样做
int arrayOneSize = sizeof(array1)/sizeof(int);
int arrayTwoSize = sizeof(array2)/sizeof(int);
这应该会给出预期的输出
【讨论】:
以上是关于组合两个数组以形成每个项目的一对[重复]的主要内容,如果未能解决你的问题,请参考以下文章
CoreData关系一对一无法显示属于每个Listing的标签数组[重复]