C++中的迭代器进阶1:插入迭代器

插入迭代器:insert iterator

  • 头文件iterator
  • 可以用来向容器插入元素。
  • 一种迭代器适配器:关于适配器
  • 支持的操作见下表:
    在这里插入图片描述

插入迭代器的三种类型:

  • back_inserter: 使用的是push_back
  • front_inserter: 使用的是push_front
  • inserter: 使用insert(但是和insert有点不同,具体见下文),接受第二个参数,这个参数必须是指向第一个参数表示的容器的迭代器。

插入器的工作过程:

最不好理解的是inserter,我们来详细看下inserter的工作过程。

  1. 当调用inserter(c, iter),得到对应迭代器。
  2. 使用过程,我们将元素插入到iter原本所指向的元素的位置之前
  3. 然后再移动指针指向原本指向的元素

也就是说,如果it表示一个由inserter生成的迭代器。那么

it = val;代码所执行的效果与:

it = c.insert(it,val); // it指向新加入的元素
++it;					// 递增使得it指向原来的元素

的效果相同。


举例说明三种插入迭代器的不同:

    std::vector<int> vec{1, 2, 3, 4, 5, 6, 7, 8, 9};

    // uses inserter
    list<int> lst1;
    copy(vec.cbegin(), vec.cend(), inserter(lst1, lst1.begin()));
    print(lst1);

    // uses back_inserter
    list<int> lit2;
    copy(vec.cbegin(), vec.cend(), back_inserter(lit2));
    print(lit2);

    // uses front_inserter
    list<int> lst3;
    copy(vec.cbegin(), vec.cend(), front_inserter(lst3));
    print(lst3);

输出结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值