c ++传递大向量作为输出

时间:2015-11-25 05:45:26

标签: c++ performance vector containers

我有几个大向量(大致有一百万个元素),比如在函数或类成员函数中生成vector<int> v。我希望有效地在这个函数/成员之外使用这个向量,即,当我将它作为输出传递时,避免完全复制它

vector<int> make_vect() {
    vector<int> v(1e6); 
    ...      // some analysis
    return v;
}

int main() {
vector<int> v = make_vect();
}

我知道我可以使用指向此向量vector<int> *v的指针,但这会使事情变得复杂一些(例如我必须手动删除它们等等)。我想知道如果我不使用引用或指针,上面的代码是如何表现的。

除了复制问题,在上面的代码中何时释放分配的内存?除非我调用v.clear(),否则内容永远不会被删除?或者当没有指向容器的变量时,它会自动删除它们?

3 个答案:

答案 0 :(得分:4)

这正是你应该按价值返回物品的方式。编译器将应用NRVO优化以确保不进行复制。

答案 1 :(得分:0)

我喜欢这样做:

void make_vect(vector<int> *dest)
{
    dest->resize(1000000); 
    ...      // some analysis
}

int main()
{
    vector<int> v;
    make_vect(&v);
}

其他人会使用矢量&amp;而不是矢量*,但我认为使用指针表示被调用的函数应该写入它。

答案 2 :(得分:0)

虽然通过值和使用指针都可以在这个特定的实例中工作,但我不会使用指针进行折扣,因为它们更复杂一些。如果您正在进行任何动态分配,它实际上可能会简化您的流程,现在就开始使用指针,这样您就不必返回并稍后更改所有内容。只是我的两分钱!