【发布时间】:2019-06-15 15:54:13
【问题描述】:
在通用代码中,我试图告诉输出迭代器(实际上是 std::back_inserter_iterator 移动一系列元素。令我惊讶的是,它看起来好像在 move-to-back_inserter 操作中移动了元素。
#include<algorithm> // move
#include<iterator> // back_inserter
#include<vector>
int main(){
std::vector<std::vector<double> > v(10, std::vector<double>(100));
std::vector<std::vector<double> > w;
assert( not v[0].empty() and w.size() == 0 );
std::copy(v.begin(), v.end(), std::back_inserter(w));
assert( not v[0].empty() and w.size() == 10 );
std::move(v.begin(), v.end(), std::back_inserter(w));
assert( v[0].empty() and w.size() == 20 ); // were v elements moved to w?
}
但是我认为v 的元素不可能真正移动到w,因为毕竟back_inserter 将执行push_back,这意味着复制到w。
在std::move 的情况下,v 元素似乎更有可能被移动到一个临时位置,然后才复制到w。
正确吗?有没有std::back_inserter真的在动?
是否已经有std::back_inserter 的变体可以利用移动/放置?类似于std::back_emplacer?
【问题讨论】:
标签: c++ c++11 copy move push-back