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

时间:2012-06-28 15:02:45

标签: c++ copy swap stdvector

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

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

};

我的问题:临时矢量w可能变得很大,我不想付出代价 复制建设。我应该使用std :: swap而不是复制吗?我的理解 是因为矢量的专业化(它在哪里),std :: swap会更有效率 只会将指针交换到堆)。

1 个答案:

答案 0 :(得分:14)

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

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