STL deque迭代器

STL deque迭代器教程

deque 容器是 C++ 11 标准中新增的序列容器,同时,STL 也为 deque 容器配备了随机访问迭代器,可以用来随机访问 deque 容器中的元素。

STL deque迭代器详解

成员函数列表

成员函数 功能
begin() 返回指向容器中第一个元素的正向迭代器;如果是 const 类型容器,在该函数返回的是常量正向迭代器。
end() 返回指向容器最后一个元素之后一个位置的正向迭代器;如果是 const 类型容器,在该函数返回的是常量正向迭代器。此函数通常和 begin() 搭配使用。
rbegin() 返回指向最后一个元素的反向迭代器;如果是 const 类型容器,在该函数返回的是常量反向迭代器。
rend() 返回指向第一个元素之前一个位置的反向迭代器。如果是 const 类型容器,在该函数返回的是常量反向迭代器。此函数通常和 rbegin() 搭配使用。
cbegin() 和 begin() 功能类似,只不过其返回的迭代器类型为常量正向迭代器,不能用于修改元素。
cend() 和 end() 功能相同,只不过其返回的迭代器类型为常量正向迭代器,不能用于修改元素。
crbegin() 和 rbegin() 功能相同,只不过其返回的迭代器类型为常量反向迭代器,不能用于修改元素。
crend() 和 rend() 功能相同,只不过其返回的迭代器类型为常量反向迭代器,不能用于修改元素。

说明

除此之外,C++ 11 标准新增的 begin() 和 end() 函数,当操作对象为 deque 容器时,也和迭代器有关,其功能分别和上面的 begin()、end() 成员函数相同。

技术细节

根据它们的功能并结合实际场景的需要,这些成员函数通常是成对使用的,即 begin()/end()、rbegin()/rend()、cbegin()/cend()、crbegin()/crend() 各自成对搭配使用。

不仅如此,这 4 对中 begin()/end() 和 cbegin()/cend()、rbegin()/rend() 和 crbegin()/crend() 的功能大致是相同的,唯一的区别就在于其返回的迭代器能否用来修改元素值。

值得一提的是,以上函数在实际使用时,其返回值类型都可以使用 auto 关键字代替,编译器可以自行判断出该迭代器的类型。

案例

begin和end迭代器

使用 begin 和 end 迭代器访问元素

#include <iostream> #include <deque> using namespace std; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; deque<int> deq{2, 5, 7, 10}; for(auto i = deq.begin(); i < deq.end(); i++) { cout << "Ele = " << *i << endl; } return 0; }

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

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

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

38_C STL deque迭代器.png

我们创建并初始化了一个双端队列 deque,接着,我们使用了迭代器遍历了该双端队列的所有元素。

cbegin和cend迭代器

使用 cbegin 和 cend 迭代器访问元素

#include <iostream> #include <deque> using namespace std; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; deque<int> deq{10, 20, 30, 40, 50}; auto first = deq.cbegin(); auto last = deq.cend(); while (first != last) { cout << *first << " "; ++first; } cout << "\n"; return 0; }

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

39_C STL deque迭代器.png

deque 模板类还提供了 cbegin() 和 cend() 成员函数,它们和 begin()/end() 唯一不同的是,前者返回的是 const 类型的正向迭代器。

这就意味着,有 cbegin() 和 cend() 成员函数返回的迭代器,可以用来遍历容器内的元素,也可以访问元素,但是不能对所存储的元素进行修改。

STL deque迭代器教程

deque 容器是 C++ 11 标准中新增的序列容器,同时,STL 也为 deque 容器配备了随机访问迭代器,可以用来随机访问 deque 容器中的元素。