C++ 复制向量的最佳方法
我有一个结构C++ 复制向量的最佳方法,c++,c++11,c++14,C++,C++11,C++14,我有一个结构Y,带有X类型的向量,我想问一下,在这种情况下,赋值是最好的解决方案还是复制更好?我应该调整y.xVec的大小吗 #include <iostream> #include <vector> struct X { X(int x):x_(x) {} int x_; }; struct Y { std::vector<X>xVec; }; int main() { X x1(1); X x2(2); std
Y
,带有X
类型的向量,我想问一下,在这种情况下,赋值是最好的解决方案还是复制更好?我应该调整y.xVec的大小吗
#include <iostream>
#include <vector>
struct X {
X(int x):x_(x)
{}
int x_;
};
struct Y {
std::vector<X>xVec;
};
int main()
{
X x1(1);
X x2(2);
std::vector<X> v = {x1,x2};
Y y;
y.xVec.assign(v.begin(), v.end());
return 0;
}
#包括
#包括
结构X{
X(int X):X_X(X)
{}
int x_2;;
};
结构{
std::vectorxVec;
};
int main()
{
xx1(1);
x2(2);
向量v={x1,x2};
Y;
y、 赋值(v.begin(),v.end());
返回0;
}
这里最简单的代码是最好的:
y.xVec = v;
或者,如果您不再需要v
:
y.xVec = std::move(v);
或者如果您将再次使用v
,但从空开始:
y.xVec = std::exchange(v, {});
如果您需要再次使用
v
,则exchange()
优于move()
,因为它使v
处于默认的构造状态(空),而不是move()
给定的未指定状态。可以说,这里最简单的代码是Y={v}代码>。在什么情况下指示使用赋值?@Cameron121341:当您希望从非另一个向量的某个对象进行赋值时。例如std::list
或std::set
。然后assign()
是合适的,我在这个答案中列出的方法不会编译。@Cameron121341assign
具有一定的范围。该范围可以是一个完整的std::vector
,但也可以只是std::vector
的一部分,甚至是其他容器的一部分。