Iterator
迭代器浅谈
引入
只有少数容器同时支持下标索引,所有标准库类型容器均支持迭代器
string类型虽然不是容器,但是拥有与容器相似方法,因此也支持迭代器
定义
迭代器可与其指向的容器中的元素建立关联,从而通过解引用来间接访问对应元素
迭代器类型
vector
vector
vector
使用
所有包含迭代器的容器类型均包含对应迭代器方法
- begin() 返回指向容器第一个元素的迭代器
- end() 返回指向容器最后一个元素下一个位置的的迭代器 尾(后)迭代器
根据容器类型确定返回迭代器的类型,若为常量容器,则返回常量迭代器
如果容器为空 begin()与end()均返回尾迭代器 - cbegin() 返回指向容器第一个元素的迭代器
- cend() 返回指向容器最后一个元素下一个位置的的迭代器 尾迭代器
返回指定类型的const_iterator的迭代器
迭代器运算符
运算符 | 结果 |
---|---|
*itera | 解引用 返回itera所指元素的引用 |
itera->mem | 箭头运算符 可访问itera迭代器指向元素的mem成员,等价于(*itera).mem |
++itera | 使迭代器指向下一个元素位置 |
- -itera|使迭代器指向上一个元素位置
itera1==itera2|当且仅当两迭代器属于同一个容器且指向同一个元素或均指向尾元素下一位置时相等
itera1!=itera2|当且仅当两迭代器属于同一个容器且指向同一个元素或均指向尾元素下一位置时相等
算数运算
运算 | 结果 |
---|---|
itera + n | 使迭代器向后移动n个位置 |
itera - n | 使迭代器向前移动n个位置 |
itera += n | 使迭代器向后移动n个位置,同时修改该迭代器 |
itera -= n | 使迭代器向前移动n个位置,同时修改该迭代器 |
itera1 - itera2 | 返回两迭代器之间的差值,类型为difference_type,同属一个一个容器的迭代器才可 |
< <= >= > | 关系运算 |
vector某些操作使迭代器失效
在涉及迭代器的循环中不允许改变迭代器所属的容器长度
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 YunDid's Blog!
评论