STL move_iterator

STL move_iterator教程

STL 中的 move_iterator 迭代器适配器,又可简称为移动迭代器,其可以实现以移动而非复制的方式,将某个区域空间中的元素移动至另一个指定的空间。

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++ 进行编译,具体命令如下:

g++ reverse_iterator.cpp -std=c++11

编译后,我们直接运行生成的二进制文件 a.out,如下图所示:

12_STL move_iterator.png

othvec 容器初始化时,使用的是移动迭代器,其会将 vec 容器中的元素直接移动到 othvec 容器中。。

STL move_iterator总结

STL 中的 move_iterator 迭代器适配器,又可简称为移动迭代器,其可以实现以移动而非复制的方式,将某个区域空间中的元素移动至另一个指定的空间。