C ++中类向量的setter

时间:2014-03-01 22:21:19

标签: c++ vector

void setVector(vector<string> aStringVec)
{

    for(std::vector<string>:: iterator s = str1.vec.begin(); s != str1.vec.end(); ++s)
    {
        classVector.pushback(*s);
    }

}

如果我执行classVector = aStringVec,classVector将指向指向aStringVec的第一个元素的指针,因为向量被认为是数组,并且可能会消失,因为它在堆栈上,对吧?

这是为类向量编写setter的正确方法,我可以在任何地方调用它吗?

2 个答案:

答案 0 :(得分:2)

如果你真的想设置这个东西,那么最好的选择就是

void setVector(vector<string> aStringVec)
{
  classVector.swap(aStringVec);
}

这可确保classVector保存函数参数内容的副本。

您在代码中尝试执行的操作是向classVector附加元素,同时产生整个输入向量的不必要副本。

答案 1 :(得分:1)

根本不需要循环来将元素附加到现有向量。使用vector::insert

void setVector(vector<string> const& aStringVec)
{
  classVector.insert(classVector.end(), aStringVec.begin(), aStringVec.end());
}

我将函数参数更改为const&const因为你不打算在你的函数中修改输入向量,你应该通过引用而不是值来传递,以避免不必要的复制。

相反,如果你想将classVector的内容替换为输入参数的内容,那么你的函数应该是

void setVector(vector<string> aStringVec)
{
  classVector = std::move(aStringVec);
}

在这种情况下,您应该按值传递参数,因为您将在函数内移动它。