【问题标题】: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++ 的新手,所以我很乐意感谢任何帮助。还有为什么我得到不属于数组的数字?

提前致谢。

【问题讨论】:

标签: c++ arrays


【解决方案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);

这应该会给出预期的输出

【讨论】:

    猜你喜欢
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 2016-12-21
    • 2019-08-11
    • 2023-01-25
    • 2022-01-04
    相关资源
    最近更新 更多