更改函数以使用向量而不是数组

Eli*_*eth 1 c++ arrays vector

我有点卡住改变功能使用矢量.我有以下函数创建一个新的动态数组.现在我需要做同样但使用向量.

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)

Seb*_*edl 6

使用向量使makeData功能变得多余.它没有做任何简单地声明类型向量的变量已经做得更好的事情.

清理其他功能是可能的,但与向量的问题无关.

此外,这些都与重载无关.


Foz*_*ozi 5

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)