快速的方法来复制一个向量到另一个

我更喜欢两种方式:

void copyVecFast(const vec<int>& original) { vector<int> newVec; newVec.reserve(original.size()); copy(original.begin(),original.end(),back_inserter(newVec)); } void copyVecFast(vec<int>& original) { vector<int> newVec; newVec.swap(original); } 

你怎么做呢?

如果通过引用发送参数,则第二个示例不起作用。 你的意思是

 void copyVecFast(vec<int> original) // no reference { vector<int> new_; new_.swap(original); } 

这将工作,但一个更简单的方法是

 vector<int> new_(original); 

他们不一样,是吗? 一个是副本,另一个是交换 。 因此函数名称。

我最喜欢的是:

 a = b; 

其中ab是vector。

这是制作vector副本的另一个有效方法,只需使用它的构造函数即可:

 std::vector<int> newvector(oldvector); 

这比使用std::copy从头到尾遍历整个向量更简单std::copy std::back_insert它们到新的向量中。

这就是说,你的.swap()不是一个副本,而是交换两个向量。 你会修改原来不包含任何东西了! 这不是一个副本。

你不应该使用交换复制向量,它会改变“原始”的向量。

反而把原来的parameter passing给新的。

 new_vector.assign(old_vector.begin(),old_vector.end()); // Method 1 new_vector = old_vector; // Method 2 

如果vectorALREADY存在,你想只是复制,你可以这样做:

 newVec.resize(oldVec.size()); memcpy(&newVec.at(0), &oldVec.at(0), oldVec.size());