【发布时间】:2021-06-27 05:17:18
【问题描述】:
您好,我正在尝试将 2 个排序后的数组合并为一个向量。
以下是我的代码。但是,我相信我使用的是正确的算法,当我打印出矢量时,它只打印出 1,2。
有人可以看看我的代码吗?
#include <iostream>
#include <vector>
using namespace std;
vector<int> merge(int arr1[],int arr2[])
{
int arr1size = sizeof(arr1) / sizeof(arr1[0]);
int arr2size = sizeof(arr2) / sizeof(arr2[0]);
vector<int> arr3;
int i = 0, j = 0;
while(i<arr1size && j<arr2size)
{
if(arr1[i] <= arr2[j])
{
arr3.push_back(arr1[i]);
i++;
}
else
{
arr3.push_back(arr2[j]);
j++;
}
}
while(i<arr1size)
{
arr3.push_back(arr1[i]);
i++;
}
while(j<arr2size)
{
arr3.push_back(arr2[j]);
j++;
}
return arr3;
}
int main()
{
int arr1[] = {1, 3, 5, 7};
int arr2[] = {2, 4, 6, 8};
vector<int> arr3;
arr3 = merge(arr1,arr2);
for(int i=0;i<arr3.size();i++)
{
cout << arr3[i] << endl;
}
return 0;
}
【问题讨论】:
-
您可以在这里查看获得的值:
int arr1size = sizeof(arr1) / sizeof(arr1[0]);。一个经典的错误。此时arr1[]只是一个指针,而不是一个数组。您必须提供具有大小的函数,或使用std::vector -
您正在使用正确的代码来打印数组,因此如果打印的输出与预期不符,则您计算出错误的结果。无论如何,您缺少的只是一种技能,那就是使用调试器逐步执行代码。网络上有视频教程,可以为您使用的任何 IDE 演示这一点。使用调试器可以很容易地解决这个问题,而无需其他人的任何帮助。
-
@damien 嗯,看起来你是对的。我将 arr1size 和 arr2size 计算移到 main 并将其作为参数传递,它显示了正确的值。谢谢你的解释。
标签: c++ algorithm vector merge function-definition