c++ - 组合两个数组以形成每个项目的一对

标签 c++ arrays

<分区>

我有两个大小为 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) / 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
    }
  }
}

关于c++ - 组合两个数组以形成每个项目的一对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56542339/

相关文章:

c++ - 从字符串/boost::any 映射构建 boost::options

c++ - 文件映射的工作原理

javascript - 警告 : Encountered two children with the same key, `[object Object]`

c++ - 在没有#define 的情况下在头文件中声明数组大小

java - JFrame 没有输出?

c++ - 我的线程运行不正常,它给出了所有结果,最后不是一个一个地在一起,并且 GUI 在线程运行期间被挂起了吗?

c++ - string::npos 是什么意思?

c++ - 如何使用 CreateProcess 将输出重定向到文件?

arrays - F# 为什么在映射函数来对数组中的每个数组进行置乱时,数组不会以不同的方式进行置乱

python - Numpy:修改特定位置的数组元素