iterator 说明
迭代器是一个变量,在容器和操纵容器的算法之间充当链接作用。
迭代器可以指向容器中的某个元素,通过迭代器就可以读写它指向的元素。
所以迭代器和指针一样用于指向容器中的某个数据,便于算法或者其他地方对齐进行操作。
一般情况之下,每个容器都会有默认匹配的迭代器类型
分类
正向:表示迭代器只能进行向前迭代,不能向后迭代,是一个单向的迭代器
反向: 表示迭代器是双向的指向数据,既可以向前迭代,也可以向后迭代
常量: 表示这个迭代器指向的对象将会是一个常量迭代器,其指向的数据是不可以更改的。
-
正向迭代器
容器类名::iterator 迭代器名;
-
常量正向迭代器
容器类名::const_iterator 迭代器名;
-
反向迭代器
容器类名::reverse_iterator 迭代器名;
-
常量反向迭代器
容器类名::const_reverse_iterator 迭代器名;
vector<int> v;
for (int i = 0; i < 50; ++i) {
v.push_back(i);
}
//正向迭代器
vector<int>::iterator i;
for (i = v.begin(); i!= v.end() ; ++i) {
cout << *i << " ,";
*i *= 2;
}
cout << endl;
//反向迭代器
vector<int>::reverse_iterator ri;
for (ri = v.rbegin(); ri != v.rend(); ++ri) {
cout << *ri << " ,";
}
//常量迭代器
vector<int>::const_iterator ci;
for (ci = v.begin(); ci != v.end() ; ++ci) {
cout << *ci << " ,";
//*ci *= 2; 由于ci是一个常量迭代器,是一个常量,因此其值是不可以更改的
}
cout << endl;
常用的容器迭代器
容器 | 迭代器功能 |
---|---|
vector | 随机访问(算法,容器本身实现) |
deque | 随机访问(算法,容器本身实现) |
list | 双向(容器实现) |
set / multiset | 双向(容器实现) |
map / multimap | 双向(容器实现) |
stack | 不支持迭代器 |
queue | 不支持迭代器 |
priority_queue | 不支持迭代器 |
一般容器都有自身成员函数来实现迭代器的功能:下图为array数组的成员函数示例