STL反向迭代器使用

STL反向迭代器使用教程

STL 中的反向迭代器适配器提供了多个构造函数用来创建反向迭代器,我们要创建一个反向迭代器适配器有三种方式,即调用该类的默认构造方法,即可创建了一个不指向任何对象的反向迭代器、使用基础迭代器创建一个反向迭代器和使用复制构造函数创建反向迭代器。

默认构造函数创建反向迭代器详解

语法

std::reverse_iterator<std::vector<int>::iterator> my_reiter;

说明

调用该类的默认构造方法,即可创建了一个不指向任何对象的反向迭代器,由此,我们就创建好了一个没有指向任何对象的 my_reiter 反向迭代器。

基础迭代器创建反向迭代器详解

语法

std::reverse_iterator<std::vector<int>::iterator> my_reiter(myvector.end());

说明

在创建反向迭代器的时候,我们可以直接将一个基础迭代器作为参数传递给新建的反向迭代器。

拷贝构造创建反向迭代器详解

语法

std::reverse_iterator<std::vector<int>::iterator> my_reiter(myvector.rbegin());

说明

reverse_iterator 模板类还提供了一个复制(拷贝)构造函数,可以实现直接将一个反向迭代器复制给新建的反向迭代器。

案例

创建反向迭代器

使用基础迭代器,创建反向迭代器

#include <iostream> #include <iterator> #include <vector> using namespace std; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; std::vector<int> myvector{1024, 99, 88, 100, 109, 110}; std::reverse_iterator<std::vector<int>::iterator> my_reiter(myvector.rbegin()); cout << *my_reiter << endl; cout << *(my_reiter + 3) << endl; cout << *(++my_reiter) << endl; cout << my_reiter[4] << endl; return 0; }

我们在 Linux 下使用 g++ 进行编译,具体命令如下:

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

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

03_STL反向迭代器适配器使用.png

我们使用了基础迭代器,创建了一个反向迭代器,并最后,使用反向迭代器访问了元素。

创建反向迭代器

使用基础迭代器,创建反向迭代器

#include <iostream> #include <iterator> #include <vector> using namespace std; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; std::vector<int> myvector{1024, 99, 88, 100, 109, 110}; std::reverse_iterator<std::vector<int>::iterator> begin(myvector.begin()); std::reverse_iterator<std::vector<int>::iterator> end(myvector.end()); for (auto iter = begin.base(); iter != end.base(); ++iter) { std::cout << *iter << ' '; } cout << endl; return 0; }

因为,这里需要使用 C++ 11,因此,我们在 Linux 下使用 g++ 进行编译,具体命令如下:

g++ stack适配器.cpp -std=c++11

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

04_STL反向迭代器适配器使用.png

我们使用了反向迭代器,遍历了容器的所有元素。

STL反向迭代器使用总结

STL 中的反向迭代器适配器提供了多个构造函数用来创建反向迭代器,我们要创建一个反向迭代器适配器有三种方式,即调用该类的默认构造方法,即可创建了一个不指向任何对象的反向迭代器、使用基础迭代器创建一个反向迭代器和使用复制构造函数创建反向迭代器。