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()
是合适的,我在这个答案中列出的方法不会编译。@Cameron121341
assign
具有一定的范围。该范围可以是一个完整的
std::vector
,但也可以只是
std::vector
的一部分,甚至是其他容器的一部分。