我正在尝试创建一个创建特定大小的数组,然后将该数组扩展到一个数组的程序。它还需要在函数调用之前显示第一个数组和函数调用后的新数组。
#include <iostream>
#include <memory>
using namespace std;
unique_ptr<int[]> newCopy(int arry[], int items)
{
unique_ptr<int[]> p(new int[items + 1]);
p[0] = 0;
for (int i = 0; i < items; i++)
{
p[i + 1] = arry[i];
}
return p;
}
void displayArry(int arry[], int items)
{
for (int i = 0; i < items; i++)
{
cout << arry[i] << " ";
}
cout << endl;
}
int main()
{
const int SIZE = 5;
int myNumbers[SIZE] = {18, 27, 3, 14, 95};
displayArry(myNumbers, SIZE);
unique_ptr<int[]> newArry = newCopy(myNumbers, SIZE);
//displayArry(newArry, SIZE + 1);
for (int i = 0; i < SIZE+1; i++)
{
cout << newArry[i] << " ";
}
return 0;
}
我希望显示功能可以同时显示普通整数数组和智能指针数组,而不必超载该功能。
显示功能主要按照标准整数数组的方式工作。扩展功能有效,如果我在主函数内部使用循环,则新的唯一指针数组将显示正确的值,但是我似乎无法弄清楚如何在显示功能中使用两者。
我已经通过用不同的传递方法弄乱了它。
首先,我将数组的displayarray()参数更改为 *。
void displayArry(int arry[], int items)
更改为
void displayArry(int* arry, int items)
然后我将.get()添加到unique_ptr数组的末尾:
displayArry(newArry, SIZE + 1);
更改为:
displayArry(newArry.get(), SIZE + 1);
这使我可以通过引用该功能传递所有数据,并允许其正确显示正常数组或unique_ptr数组。
如果对此有任何想法,或者应该这样做的方法,或者可以做得更好,我会感谢反馈。