容器 | 对应的迭代器类型 |
---|---|
array | 随机访问迭代器 |
vector | 随机访问迭代器 |
deque | 随机访问迭代器 |
list | 双向迭代器 |
set / multiset | 双向迭代器 |
map / multimap | 双向迭代器 |
forward_list | 前向迭代器 |
unordered_map / unordered_multimap | 前向迭代器 |
unordered_set / unordered_multiset | 前向迭代器 |
stack | 不支持迭代器 |
queue | 不支持迭代器 |
迭代器定义方式 | 具体格式 |
---|---|
正向迭代器 | 容器类名::iterator 迭代器名; |
常量正向迭代器 | 容器类名::const_iterator 迭代器名; |
反向迭代器 | 容器类名::reverse_iterator 迭代器名; |
常量反向迭代器 | 容器类名::const_reverse_iterator 迭代器名; |
*迭代器名
就表示迭代器指向的元素。其中,常量迭代器和非常量迭代器的分别在于,通过非常量迭代器还能修改其指向的元素。另外,反向迭代器和正向迭代器的区别在于:
//遍历 vector 容器。 #include <iostream> //需要引入 vector 头文件 #include <vector> using namespace std; int main() { vector<int> v{1,2,3,4,5,6,7,8,9,10}; //v被初始化成有10个元素 cout << "第一种遍历方法:" << endl; //size返回元素个数 for (int i = 0; i < v.size(); ++i) cout << v[i] <<" "; //像普通数组一样使用vector容器 //创建一个正向迭代器,当然,vector也支持其他 3 种定义迭代器的方式 cout << endl << "第二种遍历方法:" << endl; vector<int>::iterator i; //用 != 比较两个迭代器 for (i = v.begin(); i != v.end(); ++i) cout << *i << " "; cout << endl << "第三种遍历方法:" << endl; for (i = v.begin(); i < v.end(); ++i) //用 < 比较两个迭代器 cout << *i << " "; cout << endl << "第四种遍历方法:" << endl; i = v.begin(); while (i < v.end()) { //间隔一个输出 cout << *i << " "; i += 2; // 随机访问迭代器支持 "+= 整数" 的操作 } }运行结果为:
第一种遍历方法:
1 2 3 4 5 6 7 8 9 10
第二种遍历方法:
1 2 3 4 5 6 7 8 9 10
第三种遍历方法:
1 2 3 4 5 6 7 8 9 10
第四种遍历方法:
1 3 5 7 9
//创建一个 v list容器 list<int> v; //创建一个常量正向迭代器,同样,list也支持其他三种定义迭代器的方式。 list<int>::const_iterator i;则以下代码是合法的:
for(i = v.begin(); i != v.end(); ++i) cout << *i;以下代码则不合法,因为双向迭代器不支持用“<”进行比较:
for(i = v.begin(); i < v.end(); ++i) cout << *i;以下代码也不合法,因为双向迭代器不支持用下标随机访问元素:
for(int i=0; i<v.size(); ++i) cout << v[i];
本文链接:http://task.lmcjl.com/news/15962.html