C++ vector:我应该复制还是交换?

ATe*_*emp 3 c++ swap copy stdvector

我有一个具有向量成员变量的类,我填写如下:

class Foo {
vector<int> v;
void g() {
  vector<int> w;
  // fill w
  v = w;
}

};
Run Code Online (Sandbox Code Playgroud)

我的问题:临时矢量w可能变得很大,我不想付出复制结构的代价.我应该使用std :: swap而不是复制吗?我的理解是std :: swap由于vector的特化而更有效率(它只是将指针交换到堆).

Ben*_*igt 14

是的,你应该在这里交换.在C++ 11中,您也可以说v = std::move(w);.

无论哪种方式,变量w都会立即超出范围,因此其内容无关紧要,您也可以转移所有权而不是复制.