我有两个向量:
std::vector<int> v1, v2;
// Filling v1
...
Run Code Online (Sandbox Code Playgroud)
现在我需要复制v1到v2.有什么理由比较喜欢
v2 = v1;
至
std::copy (v1.begin(), v1.end(), v2.begin());
(或相反亦然)?
Gri*_*zly 66
一般来说我更喜欢v2 = v1:
std::copy如果v2不具有相同的长度v1将不起作用(它不会调整它的大小,因此它将保留一些旧元素的最佳情况(v2.size() > v1.size()并覆盖程序中其他地方使用的一些随机数据)v1即将到期(并且您使用C++ 11),您可以轻松地将其修改为move内容std::copy,因为实施者可能会在std::copy内部使用,如果它给出了性能优势.总之,std::copy表现力较差,可能做错事,甚至更快.所以在这里没有任何理由使用它.
Che*_*Alf 11
调用std::copy可能会尝试访问目标向量末尾之外的项目.
使用分配.
微观优化不是你的工作:这是图书馆作者的责任,也是编制者的责任.
如果它不必是正确的,你可以任意快速地使你的代码.
copy然而,在它的情况下,它是否更快是相当令人怀疑的,并且它对于一般情况肯定是不正确的.
如果v2不够大,如果你copy按照自己的意愿使用,你将获得缓冲区溢出.
您可以使用后插入迭代器来调用push_back v2.然而,这可能会导致多次重新分配,具体取决于有多大v1.
copy(v1.begin(), v1.end(), back_inserter(v2));
Run Code Online (Sandbox Code Playgroud)
你最好让vector管理正确.赋值运算符执行此操作,如下所示vector::assign:
v2.assign(v1.begin(), v1.end());
Run Code Online (Sandbox Code Playgroud)
我有一个暗示,赋值运算符是以实现的方式实现的vector::assign.