迭代器:
1)定义:容器类名::iterator 迭代器名;
如:array<T,N>::iterator iter; vector<T>::iterator iter; deque<T>::iterator iter; list<T>::iterator iter; forward_lis<T>::iterator iter;
2)初始化:
vector<int> ivec; vector<int>::iterator iter1=ivec.bengin(); //将迭代器iter1初始化为指向ivec容器的第一个元素 vector<int>::iterator iter2=ivec.end(); //将迭代器iter2初始化为指向ivec容器的最后一个元素的下一个位3)分类:正向迭代器:iterator 反向迭代器:reverse_iterator 常量正向迭代器:const_iterator 常量反向迭代器:const_reverse_iterator4)操作:
正向: *iter //对iter进行解引用,返回迭代器iter指向的元素的引用 iter->men //对iter进行解引用,获取指定元素中名为men的成员。等效于(*iter).men ++iter //给iter加1,使其指向容器的下一个元素 iter++ iter1==iter2 //比较两个迭代器是否相等,当它们指向同一个容器的同一个元素或者都指向同同一个容器的超出末端的下一个位置时,它们相等 iter1!=iter2 双向:(在正向的基础上增加) --iter //给iter减1,使其指向容器的前一个元素 iter-- 随机访问:P+i //使得 p 往后移动 i 个元素。 p+=i //返回 p 后面第 i 个元素的迭代器。 p-i p-=i p[i] //返回 p 后面第 i 个元素的引用。 iter1与iter2还可进行比较: <,<=,>,>=;5)不同容器支持不同的迭代器:
容器 | 迭代器功能 |
---|---|
vector | 随机访问 |
deque | 随机访问 |
list | 双向 |
set / multiset | 双向 |
map / multimap | 双向 |
stack | 不支持迭代器 |
queue | 不支持迭代器 |
priority_queue | 不支持迭代器 |