C++ 中类向量的设置器
Setter for class vectors in C++
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);
}
在这种情况下,您应该按值传递参数,因为您将在函数中从它移动。
相关文章:
- 将特征矩阵的向量设置为0
- 将向量设置为等于 {};
- 设置负元素特征稀疏向量C++
- 如何设置一个 std::vector 与另一个,其中两个是不同类的向量?
- 空向量占用的空间是否与指向当前设置为 nullptr 的类型的指针一样多
- 如何在 c++ 中从字符串向量设置类对象
- 设置 A=B 会以某种方式弄乱 B 吗?(所有向量)C++
- 当将向量设置为一个值时,整个向量会被覆盖
- 如何使用向量设置 OpenCV3 calcHist() 的参数
- 如何设置 "discrete_distribution" c++ 的向量
- 将向量<double>设置为wxComboBox的选择值
- 当对象包含其他对象的向量时,无法设置值
- 设置::使用数字中的引号进行向量初始化
- 如何在C++中创建一个网格,这将允许我将每个索引设置为一个向量,以便以后操作该向量,然后绘制它
- 如何在设置元素中重用向量?
- 有效的将向量传递给课堂中的设置器
- 将预定但非初始化的向量设置为另一个别名
- 如何将2D向量中的对象设置为空指针[C ]
- 在c++中设置向量
- 在运行时动态设置向量类