C++ 一些特殊的迭代器使用总结

插入迭代器

  1. 定义

    ①.概念

    插入器是一种迭代器适配器,它接受一个容器,生成一个迭代器,能实现向给定容器添加元素。

    ②.头文件

    插入迭代器定义在头文件 iterator 中。

  2. back_inserter

    ①.概念

    back_inserter 创建一个使用 push_back 的迭代器。

    ②.迭代器赋值

    直接给迭代器赋值即可给绑定的容器插入元素。

在这里插入图片描述

③.其他操作

支持 *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 来插入元素。

在这里插入图片描述

  1. front_inserter

    ①.概念

    front_inserter 创建一个使用 push_front 的迭代器。

    ②.迭代器赋值

    直接给迭代器赋值即可给绑定的容器插入元素。

在这里插入图片描述

③.其他操作

同 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));//
  1. inserter

    ①.概念

    inserter 创建一个使用 insert 操作的迭代器,需要提供第二个参数,必须是指向给定容器的迭代器,元素将插入到该元素之前。

    ②.迭代器赋值

    直接给迭代器赋值即可给绑定的容器插入元素。

在这里插入图片描述

③.其他操作

同 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 执行插入操作后会使使原来的迭代器后移指向新的位置,即指向的元素始终不变,不会操作元素顺序颠倒。

流迭代器

  1. 定义

    ①.概念

    类似容器的操作,标准库也为输入输出流定义了迭代器,这些迭代器将他们对应的流当作一个特定类型的元素序列来处理;通过使用迭代器可以用泛型算法来操作流数据。

    ②.头文件

    流迭代器定义在头文件 iterator 中。

  2. 输入流迭代器

    ①.概念

    输入流迭代器绑定到一个输入流对象,从流中读取指定类型的元素,直到遇到文件尾或者错误为止。

    ②.定义输入流迭代器

    定义一个输入流迭代器必须指定要读取的数据类型、和绑定的流对象。

    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;
    
  3. 输出流迭代器

    ①.概念

    输出流迭代器绑定到一个输出流,可以对任何具有输出运算符的类型定义 ostream_iterator。

    ②.定义输出流迭代器

    定义一个输出流迭代器必须指定要输出的数据类型、和绑定的流对象。

    ostream_iterator<int> out_iter(cout," ");//将 int 类型的数据写入输出流 cout,每个元素后输出 " "
    

    ③.输出流操作

    可以直接给输出流迭代器赋值来将数据写入到输出流对象中。*out、++out、out++ 不对 out 做任何事情,都返回 out。

在这里插入图片描述

④.使用算法

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

在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值