std::vector::swap 对比 std::vector::operator= 的表现

Performance of std::vector::swap vs std::vector::operator=

给定两个等长的向量:

std::vector<Type> vec1;
std::vector<Type> vec2;

如果vec2的内容需要替换成vec1的内容,使用

是不是更高效
vec2.swap(vec1);

vec2 = vec1;

假设vec1会保留在内存中,但操作后的内容无关紧要?另外,有没有我没有考虑过的更有效的方法?

swap 会更有效率,因为没有复制。 = 将在 vec2 中创建 vec1 的副本,保持原件不变。

如果您查看文档,您会发现 swap is constant while = 是线性的。

最有表现力、效率最高的方式是:

vec2 = std::move(vec1);

实际上这会 probablyvec1 留空,但基本上这只是意味着您不再关心其内容,您希望将其移至 vec2

它和交换一样高效,比复制赋值更高效。