复制矢量的最佳方式

Best way to copy a vector

我有一个结构 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;
}

这里最简单的代码是最好的:

y.xVec = v;

或者如果您不再需要 v

y.xVec = std::move(v);

或者如果您将再次使用 v 但从空开始:

y.xVec = std::exchange(v, {});
如果您需要再次使用 v

exchange() 优于 move(),因为它使 v 处于默认构造状态(空),而不是move().

给出的未指定状态