将两个数组组合在一起以形成每个项对

时间:2019-06-11 11:06:59

标签: 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 ++还是陌生的,因此,我将非常感谢您的帮助。还有为什么我会得到不属于数组的数字?

谢谢。

2 个答案:

答案 0 :(得分:4)

要获取数组中元素的数量,必须将其大小除以数组中元素的大小:

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
    }
  }
}

答案 1 :(得分:2)

数组的大小(每个数组中的元素数)计算存在问题。

int arrayOneSize = sizeof(array1);
int arrayTwoSize = sizeof(array2);

这将是元素数量* sizeof(int),它给出了总大小。由于您仅对元素数量感兴趣,因此您宁愿这样做

int arrayOneSize = sizeof(array1)/sizeof(int);
int arrayTwoSize = sizeof(array2)/sizeof(int);

这应该给出预期的输出