组合两个数组以形成每个项目的一对[重复]

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的标签数组[重复]

如何在不重复值的情况下链接两个 jcombobox

将一对多字符串结果作为组合查询中的列

每个jQuery在数组上循环几次[重复]

在 python 中使用 pandas 组合列表中的数据框以形成单个数据框 [重复]

为啥将项目添加到空白数组中会重复显示项目?