3. 迭代器
迭代器是一种模拟指针来对顺序或随机容器进行数据访问的工具。使用迭代器可以用统一的方法对标准模板库中的容器进行访问。
C++ 中不同的容器可以通过如下成员函数返回容器的迭代器。虽然不同容器返回的迭代器的类型可能不同,但迭代器的操作方式都是相同。
容器中迭代器相关的成员函数
成员函数
说明
迭代器相关成员函数
begin 或 cbegin(C++11)返回容器数据开始位置的迭代器
end或cend回容器数据结束位置的迭代器(最后一个元素的后面)
rbegin或crbegin(C++11)返回反向迭代器的起始位置(最后一个元素)
rend或 crend(C++11)返回反向迭代器的结束位置(第一个元素的前一位置)
上述
cbegin、cend、crbegin、crend这个四个以c开头的迭代器相关成员函数返回的迭代器具有常属性,不能使用迭代器对容器内的数据进行修改。
迭代器的基本操作
成员函数
说明
*it解引用,引用当前的数据元素。
=赋值(拷贝赋值)。
== 或 !=比较两个迭代器是否指向同一位置。
++it 或 it++前置/后置自增,让迭代器向后移动到下一个元素。
--it 或 it--前置/后置自减,让迭代器向前移动到前一个元素。
it + n 或 n + it返回向后移动 n 个位置的新迭代器。
it - n返回向前移动 n 个位置的新迭代器。
it += nit 向后移动 n 个位置,并返回迭代器自身。
it -= nit 向前移动 n 个位置,并返回迭代器自身。
it2 - it1返回两个迭代器的距离((需指向同一容器,整数值)。
< 或 <= 或 > 或 >=比较两个迭代器的前后顺序(需指向同一容器)。
it[n]下标访问,等同于
*(it + n)。it->访问结构体类(或类)对象的成员。
示例
// filename: iterator.cpp
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v = {11, 3, 7, 5, 9};
auto it = v.begin();
cout << "*it: " << *it << endl; // 11
cout << "*(it+2): " << *(it+2) << endl; // 7
cout << "it[3]: " << it[3] << endl; // 5
auto it2 = it + 4;
cout << "*it2: " << *it2 << endl; // 9
cout << "it < it2: " << (it < it2) << endl; // 1
it2++;
cout << "it2 == v.end(): " << (it2 == v.end()) << endl; // 1
}
编译和运行结果如下
weimz@mzstudio:~$ g++ -o iterator iterator.cpp
weimz@mzstudio:~$ ./iterator
*it: 11
*(it+2): 7
it[3]: 5
*it2: 9
it < it2: 1
it2 == v.end(): 1