STL 中的 move_iterator 迭代器适配器,又可简称为移动迭代器,其可以实现以移动而非复制的方式,将某个区域空间中的元素移动至另一个指定的空间。
#include <iterator> using namespace std;
说明
实现反向迭代器的模板类定义在
<iterator>
头文件,并位于 std 命名空间中。STL move_iterator模板
语法
template <class Iterator> class move_iterator;
说明
可以看到,在使用此迭代器时,需要传入一个基础迭代器 Iterator。
技术细节
注意,此基础迭代器的类型虽然没有明确要求,但该模板类中某些成员方法的底层实现,需要此基础迭代器为双向迭代器或者随机访问迭代器。也就是说,如果指定的 Iterator 类型仅仅是输入迭代器,则某些成员方法将无法使用。
实际上,在 move_iterator 模板类中就包含有指定 Iterator 类型的基础迭代器,整个模板类也是借助此基础迭代器实现的。关于 move_iterator 的底层实现,C++ STL move_iterator 手册给出了详细的参考代码。
案例
创建并使用move_iterator
创建并使用 move_iterator
#include <iostream> #include <iterator> #include <vector> #include <list> #include <string> using namespace std; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; vector<string> vec{"STL", "Python", "Java", "Golang"}; vector<string> othvec(make_move_iterator(vec.begin()), make_move_iterator(vec.end())); cout << "vec:" << endl; for (auto ch : vec) { cout << ch << " "; } cout << endl << "othvec:" << endl; for (auto ch : othvec) { cout << ch << " "; } cout << endl; return 0; }
我们在 Linux 下使用 g++ 进行编译,具体命令如下: