我有点卡住改变功能使用矢量.我有以下函数创建一个新的动态数组.现在我需要做同样但使用向量.
int *makeData(int size)
{
int *ptr = nullptr;
ptr = new int[size];
return ptr;
}
Run Code Online (Sandbox Code Playgroud)
这是我迄今为止所做的全部,似乎无法弄清楚下一步该做什么.我需要指针返回吗?
int *makeData(int size)
{
vector<int> data(100);
}
Run Code Online (Sandbox Code Playgroud)
这个功能似乎还可以,但有一种方法可以优化它(使它更简单,更清洁).
void getMovieData2(vector<int> data, int num)
{
int temp;
cout << "Enter the number of movies each student saw.\n";
for (int count = 0; count < num; count++)
{
cout << "Student " << (count + 1) << ": ";
cin >> temp;
data.push_back (temp);
while (arr[count] <= 0)
{
cout << "The number of movies be greater than zero.\n";
cout << "How many movies were seen by Student "
<< (count + 1) << "? ";
cin >> temp;
data.push_back (temp);
}
}
}
Run Code Online (Sandbox Code Playgroud)
你makeData的矢量将是
vector<int> makeData(int size) {
return vector<int>(size);
}
Run Code Online (Sandbox Code Playgroud)
如你所见它实际上是一样的
vector<int> data(size);
Run Code Online (Sandbox Code Playgroud)
但是,如果始终使用auto,它会很有用
auto data = makeData(size);
Run Code Online (Sandbox Code Playgroud)
从你的getMovieData功能:不,该功能没有按预期工作.您将向量作为值传递并在其中"返回"数据 - 除了您将数据放入将在函数返回时将被销毁的本地副本.
解决方案是使用引用,如
void getMovieData(vector<int> &outData, int count);
Run Code Online (Sandbox Code Playgroud)
但是我建议你只需返回一个新的向量
vector<int> getMovieData(int count);
Run Code Online (Sandbox Code Playgroud)