alf*_*lfC 5 c++ copy move push-back c++11
在通用代码中,我试图告诉输出迭代器(实际上 astd::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?
}
Run Code Online (Sandbox Code Playgroud)
但是,我认为 的元素不可能v真正移动到w,因为毕竟back_inserter会执行 apush_back这意味着复制到w。
在这种std::move情况下,v元素似乎更有可能被移动到临时文件中,然后才复制到w.
那是对的吗?真的有std::back_inserter什么动静吗?
是否已经有一种std::back_inserter利用移动/安置的变体?像std::back_emplacer?
std::back_inserter()是用于创建对象的便捷函数模板std::back_insert_iterator。
该类std::back_insert_iterator已经operator=重载以获取右值引用类型,即:
back_insert_iterator<Container>& operator=(typename Container::value_type&& value);
Run Code Online (Sandbox Code Playgroud)
因此,std::back_insert_iterator已经准备好利用移动语义了。
| 归档时间: |
|
| 查看次数: |
1420 次 |
| 最近记录: |