C++学习笔记(二): 迭代器
来源:互联网 发布:cms监控软件下载 编辑:程序博客网 时间:2024/05/22 06:09
迭代器:
每种容器都提供了若干共同工作的迭代器类型,与容器类型一样,所有迭代器都具有相同的接口, 即它们都支持某种操作支持的操作有:
*iter 指向元素
iter->mem 解引用
++iter iter++ 自增
--iter iter-- 自减
iter1==iter2 判断相等
iter !=iter2 判断不等
vector 和 deque 容器的迭代器提供额外的运算
它们支持的操作有:
iter+n 迭代器加整数值, 这个含义表示,迭代器的地址相加,n表示iter所指向元素之后的第n个元素, 类似的还有
iter-n
iter1 += iter2
iter1 -= iter2
iter1-iter2
>, >=, <, <=
关系操作符,只适用于vector和deque容器, 这是因为只有这两种容器为其元素提供快速随机的访问。
迭代器的范围:
C++语言使用一对迭代器标记迭代器范围, 这两个迭代器分别指向同一个容器中的两个元素或超出末端的下一位置, 通常它们被命名为first和last, 或beg和end
对于 后一个迭代器, last或end, 它从来都不是指向容器的最后一个元素,而是指向最后一个元素的下一个位置。
迭代器从 first开始,直到遇到last停止,可以访问这之间所有的元素。
此类元素范围称为 左闭合区间
使用左闭合区间的编程意义:
保证了容器元素非空, 指向第一个元素,
保证了当first==last时 迭代器退出
顺序容器操作:
每种顺序容器都提供了一组有用的类型定义以及以下操作:
在容器中添加元素
在容器中删除元素
设置容器大小
获取容器内第一个和最后一个元素
介绍容器定义的类型别名:
size_type 无符号整形, 足以存储此容器类型的最大可能容器长度
iterator 此容器类型的迭代器类型
const_iterator 元素的只读迭代器类型
reverse_iterator 按逆序寻址元素的迭代器
const_reverse_iterator 元素只读逆序迭代器
difference_type 足够存储两个迭代器差值的有符号整形, 可为负数
value_type 元素类型
reference 元素的左值类型, 是value_type&的同义词
const_reference 元素常量的左值类型
begin和end成员
c.begin() 返回一个迭代器, 它指向容器c的第一个元素
c.end() 返回一个迭代器, 它指向容器c的最后一个元素的下一个位置
c.rbegin() 和 c.rend()是逆序操作的
上述每个操作 都有两套定义, 一个是返回给常量迭代器,一个是普通迭代器
在顺序容器中添加元素: push_back
所有顺序容器都支持push_back操作, 提供在容器尾部插入一个元素的功能
每次向 容器中添加一个元素, 容器的长度自动增加一, 它是动态的
在顺序容器中添加元素的操作:
c.push_back(t) 在容器c的尾部添加值为t的元素
c.push_front(t) 在容器c的前端添加值为t的元素。
c.insert(p, t) 在迭代器p所指向的元素前面插入值为t的新元素,并返回指向新添加元素的迭代器
c.insert(p, n, t) 就是插入n个值
c.insert(p, b, e) 就是在迭代器所指向的元素前面插入 迭代器b到迭代器e之间范围的元素。
除了push_back运算, list和deque容器类型还提供了类似的操作:push_front。 这个操作实现在容器首部插入新元素的功能。
添加元素 可能导致迭代器失效
在vector容器中添加元素可能会导致整个容器的重新加载,这样的话,该容器涉及到的所有迭代器都会失效, 就是不再指向任何元素, 就像容器重新定义了迭代器。
避免操作由end操作返回的迭代器
vector<int>::iterator first=v.begin(), last=v.end();
while(first != last)
{
first = v.insert(first, 42);
++first;
}
}
这回导致整个程序的死循环。 因为当insert()时, 由于整个容器的所有迭代器重新加载,因此导致 last存储的迭代器失效,而没有指向容器的任何一个元素。
因此,应该改为如下代码:
while(first != v.end())
{
}
}
0 0
- c学习笔记(二)
- C语言学习笔记(二)
- 《C和指针》学习笔记(二)
- c++primer学习笔记(二)
- C++Primer学习笔记(二)
- c++Templates学习笔记(二)
- C语言学习笔记(二)
- [C++]C++学习笔记(二)
- C语言程序学习(二)笔记
- 《Effective C++》学习笔记(二)
- Objective-C学习笔记(二)-HelloWorld
- C/C++学习笔记(二)
- Objective-c 学习笔记(二)
- 《c专家编程》学习笔记(二)
- C语言学习笔记(二)
- C语言学习笔记(二)
- 学习C的一些笔记(二)
- 《effective c++》学习笔记(二)
- 安装JAVA开发环境--JDK
- IT从上层到底层是怎样的学习过程
- Apache服务的性能和工作原理
- android service 之二(IntentService)
- Pentaho BI server安装之——Adminstrator console
- C++学习笔记(二): 迭代器
- 研究生生活总结
- 1-9的九个数排列
- Duilib的异性窗体
- Android应用程序架构
- C语言读取配置文件
- 剑指offer 6.3 知识迁移能力6-和为s的连续正数序列
- 公钥和私钥
- Oakley Jawbone Matte Black Though