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

时间:2015-03-17 14:52:07

标签: c++ arrays vector

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

int *makeData(int size)
{
    int *ptr = nullptr;
    ptr = new int[size];
    return ptr;
}

这是我迄今为止所做的全部,似乎无法弄清楚下一步该做什么。我需要一个返回的指针吗?

int *makeData(int size)
{
    vector<int> data(100);
}

这个功能似乎还可以,但有一种方法可以优化它(使其更简单,更清洁)。

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);
    }
}
}

3 个答案:

答案 0 :(得分:6)

使用向量使makeData函数变得多余。它并没有做任何简单地声明类型向量的变量并没有做得更好的事情。

可以清理其他功能,但与矢量问题无关。

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

答案 1 :(得分:5)

你的makeData向量是

vector<int> makeData(int size) {
    return vector<int>(size);
}

如您所见,它实际上与

相同
vector<int> data(size);

但是,如果您始终使用自动

,它会很有用
auto data = makeData(size);

getMovieData函数开始:否,该函数未按预期工作。您正在传递一个向量作为值,并且&#34;返回&#34;其中的数据 - 除了您将数据放入本地副本中,该函数将在函数返回时被销毁。

解决方案是使用引用,如

void getMovieData(vector<int> &outData, int count);

但我建议您只返回一个新的载体

vector<int> getMovieData(int count);

答案 2 :(得分:-2)

矢量对象的容量可以保留或调整大小。 保留功能为内部存储分配额外的内存。

虽然resize函数设置了vector中最大可能元素的大小。

例子可以在这里找到:

http://www.cplusplus.com/reference/vector/vector/resize/

http://www.cplusplus.com/reference/vector/vector/reserve/