快速的方法来复制一个向量到另一个
我更喜欢两种方式:
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;
其中a
和b
是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());