C++ 中类向量的设置器

Setter for class vectors in C++

本文关键字:设置 向量 C++      更新时间:2023-10-16
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 的正确方法吗,我可以在任何地方调用它吗?

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

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

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

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

你根本不需要一个循环来将元素附加到现有向量。使用 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);
}

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