一、所有标准库容器都可以使用的迭代器运算
所有标准库容器都支持的迭代器运算
| 说明 |
*iter |
返回迭代器iter所指向的元素的引用
|
iter->mem
|
获取指定元素中名为mem的成员,等效于(*iter).mem
|
++iter
iter++
| 使iter指向容器里的下一个元素 |
--iter
iter--
|
使iter指向容器里的前一个元素
|
iter1 == iter2
iter1 != iter2
|
当两个迭代器都指向同一个容器的同一个元素或者同一个容器的超出末端的下一个位置时,两个迭代器相等;否则,两个迭代器不相等。
|
二、vector和deque类型容器支持的迭代器运算
vector和deque标准库容器支持的迭代器运算
| 说明 |
iter + n iter - n |
使iter指向容器里的前面或后面的第n个元素
|
iter1 += iter2
iter1 -= iter2
iter1 - iter2
|
迭代器的复合赋值运算以及减法运算
|
>, >=, <, <=
| 迭代器的关系操作符 |
习题9.9:将list容器中的元素进行反向输出
#include <iostream>
#include <string>
#include <utility>
#include <vector>
#include <list>
#include <map>
using namespace std;
int main()
{
int ia[5] = {0, 1, 2, 3, 4};
int num = sizeof(ia) / sizeof(int);
list<int> ilist(ia, ia + num);
for (list<int>::iterator iter = ilist.end(); iter != ilist.begin();)
{
printf("%d\n", *(--iter));
}
return 0;
}
[chapter9]$ ./a.out
4
3
2
1
0
#include <iostream>
#include <string>
#include <utility>
#include <vector>
#include <list>
#include <map>
using namespace std;
// find ival between beg and end
// if find, return true; if not find, return false;
bool find_int(vector<int>::iterator beg, vector<int>::iterator end, int ival)
{
while (beg != end)
{
if (*beg++ == ival) return true;
}
return false;
}
int main()
{
int ia[5] = {0, 1, 2, 3, 4};
int num = sizeof(ia) / sizeof(int);
vector<int> ivec(ia, ia + num);
for (int i = 0; i < 10; i++)
{
bool bool_val = find_int(ivec.begin(), ivec.end(), i);
printf("The result of find %d is: %s.\n", i, (bool_val == true) ? "true" : "false");
}
return 0;
}
[chapter9]$ ./a.out
The result of find 0 is: true.
The result of find 1 is: true.
The result of find 2 is: true.
The result of find 3 is: true.
The result of find 4 is: true.
The result of find 5 is: false.
The result of find 6 is: false.
The result of find 7 is: false.
The result of find 8 is: false.
The result of find 9 is: false.