STL笔记

泛型编程旨在让算法独立于存储类型(通过模板实现),算法独立于容器类型(通过迭代器实现)

迭代器

迭代器应该满足至少四个条件:

  1. 可以对迭代器执行解除引用的操作,以便能够访问它引用的值,如果p是一个迭代器,应对*p进行定义
  2. 能够互相赋值, p = q
  3. 能够互相比较, p==q,p!=q
  4. 能够通过迭代器遍历容器所有元素

迭代器与指针

STL对每个容器类定义了相应的迭代器类型,对于某个类,迭代器可能是指针,也可能是对象;
迭代器是广义指针,指针满足迭代器所有要求,
最好避免直接使用迭代器,尽量使用STL函数,(如for_each())来处理细节,也可以使用C++11新增的基于范围的for循环

for (auto x:score) cout <<  x << endl;

迭代器类型

输入迭代器

输入迭代器是容器的信息->程序
单向迭代器,可以递增,不能倒退,通过++实现;

输出迭代器

程序的输出,容器的输入,解除引用从而修改容器值,而不能读取

正向迭代器

正向迭代器具备输入迭代器和输出迭代器的功能,同时有自己的功能:总是按相同的顺序遍历一系列值,正向迭代器递增后仍然可以对前面的值解除引用(需要提前保存)

双向迭代器

具有正向迭代器的全部特性,同时支持两种(前缀和后缀)递减运算符

随机访问迭代器

支持随机访问的操作和用于排序的关系运算符
随机访问:

a+n
a-n
a[n]
b-a //b与a之间差多少元素

关系运算符:

a<b a>b a>=b a<=b

指针可以作为迭代器
例如sort函数本来是迭代器作为参数的,但是可以用数组索引(指针)

int SIZE = 100
double arr[SIZE]
sort(arr,arr+SIZE)//数组名+size表示超尾迭代器的位置

iterator头文件

定义了

  1. ostream_iterator(输出迭代器)
  2. istream_iterator
  3. reverse_iterator
  4. front_iterator
  5. insert_iterator
    其中,reverse_iterator,与rbegin() rend()结合使用,翻转迭代器
    insert_iterator,包括front_insert_iterator, back_insert_iterator,插入迭代器可以自动分配内存,确保容器容纳足够信息

vector
迭代器失效
https://blog.csdn.net/skyroben/article/details/70877008

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值