容器删除元素后迭代器失效_一些特殊的迭代器

点击上方“蓝字”,发现更多精彩。迭代器01PART概念 迭代器是一种检查容器内元素并遍历元素的数据类型,类似指针的操作。每一种标准容器都定义了一种迭代器类型,容器迭代器的范围左闭右开,[begin,end)。02PART迭代器操作 迭代器支持以下操作 :
迭代器操作
定义正向迭代器C::iterator it;如:vector::iterator iter
反向迭代器C::reverse_iterator it;

基本

操作

解引用

*iter

获取元素成员iter->men
指向下个元素iter++
指向上个元素iter--
比较iter1 != iter2
求距离iter1 - iter2
插入迭代器01PART定义①.概念插入器是一种迭代器适配器,它接受一个容器,生成一个迭代器,能实现向给定容器添加元素。②.头文件插入迭代器定义在头文件 iterator 中。02PARTback_inserter①.概念back_inserter 创建一个使用 push_back 的迭代器。②.迭代器赋值直接给迭代器赋值即可给绑定的容器插入元素。

ff679bdf73734551a2e4af08dc424a9d.png

③.其他操作支持 *iter、iter++、++iter 的操作,但是对 iter 不会做任何事情,都是返回的 iter。
vector<int> iv;auto it =  back_inserter(iv);//创建一个插入器*it = 1;it++;*it = 2;++it;*it = 3;it = 4;//当前 iv 中的元素为 1,2,3,4
④.算法中应用back_inserter 可以作为算法中的目的位置来使用。
vector<int> iv;fill_n(back_inserter(iv),10,0);//添加10个元素到vec
如上的算法中,相当于每次调用 push_back 来插入元素。

822dfbe55730e0c4850721876bac84ff.png

03PARTfront_inserter①.概念front_inserter 创建一个使用 push_front 的迭代器。②.迭代器赋值直接给迭代器赋值即可给绑定的容器插入元素。

fc17a22658424453341286d95ae5e529.png

③.其他操作同 back_inserter ,也 支持 *iter、iter++、++iter 的操作,但是对 iter 不会做任何事情,都是返回的 iter。④.算法中应用front_inserter 可以作为算法中的目的位置来使用。
list<int> lst = {1,2,3,4};list<int> lst2;copy(lst.cbegin(),lst.cend(),front_inserter(lst2));//
04PARTinserter①.概念inserter 创建一个使用 insert 操作的迭代器,需要提供第二个参数,必须是指向给定容器的迭代器,元素将插入到该元素之前。②.迭代器赋值直接给迭代器赋值即可给绑定的容器插入元素。

01fd9af8636b4dd74fe4729b8adda485.png

③.其他操作同 back_inserter ,也 支持 *iter、iter++、++iter 的操作,但是对 iter 不会做任何事情,都是返回的 iter。④.算法中应用inserter 可以作为算法中的目的位置来使用。
list<int> lst = {1,2,3,4};list<int> lst2;copy(lst.cbegin(),lst.cend(),inserter(lst2,lst2.begin()));//
不同与 front_inserter  每次都是在开头添加元素,会使插入的元素顺序颠倒,inserter 执行插入操作后会使使原来的迭代器后移指向新的位置,即指向的元素始终不变,不会操作元素顺序颠倒。流迭代器01PART定义①.概念类似容器的操作,标准库也为输入输出流定义了迭代器,这些迭代器将他们对应的流当作一个特定类型的元素序列来处理;通过使用迭代器可以用泛型算法来操作流数据。②.头文件流迭代器定义在头文件 iterator 中。02PART输入流迭代器①.概念输入流迭代器绑定到一个输入流对象,从流中读取指定类型的元素,直到遇到文件尾或者错误为止。②.定义输入流迭代器定义一个输入流迭代器必须指定要读取的数据类型、和绑定的流对象。
istream_iterator<int> int_it(cin);//从 cin 读取 int 类型元素istream_iterator<int> int_eof;//尾后迭代器vector<int> vec;while( int_it != int_eof)    vec.push_back(*int_it++);//等价于以下操作vector<int> iv(int_it,int_eof)//从迭代器范围构造
②.使用算法操作流迭代器可以像容器中定义的迭代器一样使用算法操作流迭代器
istream_iterator<int> in(cin),eof;cout << accumulate(in,eof,0) << endl;
03PART输出流迭代器①.概念输出流迭代器绑定到一个输出流,可以对任何具有输出运算符的类型定义 ostream_iterator。②.定义输出流迭代器定义一个输出流迭代器必须指定要输出的数据类型、和绑定的流对象。
ostream_iterator<int> out_iter(cout," ");//将 int 类型的数据写入输出流 cout,每个元素后输出 " "
③.输出流操作可以直接给输出流迭代器赋值来将数据写入到输出流对象中。*out、++out、out++ 不对 out 做任何事情,都返回 out。

3498471ef4a89e5f5e713c76c236170a.png

④.使用算法使用迭代器操作流对象可以方便的使用泛型算法。

ed1416dab167b9e21ef9e0bd638fc0aa.png

099b4d9cf54f3c5ee91791bbbaf018e0.png扫码关注持续获取最新文章c++学习 算法与数据结构
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值