C++ - 插入迭代器(Iterator Inserter)

参考:

  1. 《Essential C++》
  2. CSDN - C++迭代器之’插入迭代器’

一、概述

插入迭代器(Insert Iterator),又叫插入器(Inserter)。插入迭代器的主要功能为把一个赋值操作转换为把相应的值插入容器的操作。插入迭代器对标准算法库而言尤其重要。算法库对所有在容器上的操作有个承诺:决不修改容器的大小(不插入、不删除)。有了插入迭代器,既使得算法库可以通过迭代器对容器插入新的元素,又不违反这一承诺,即保持了设计上的一致性

二、使用样例

插入迭代器分为三种类型:尾部插入器(back_insert),首部插入器(front_insert)和普通插入器(insert)

#include <iterator>

PrintElements():

template <typename ElemType>
void PrintElements(ElemType first, ElemType last, string s)
{
    cout << s << ": ";
    while (first != last)
        cout << *first++ << " ";
    cout << endl;
}

2.1 back_inserter()

back_inserter()会以容器的push_back()函数取代assignment(赋值)运算符。对vector来说,这是比较合适的inserter。传入back_inserter的参数,应该就是容器本身:

    vector<int> vec = {1, 1, 2, 2, 3};
    vector<int> vec2 = {8, 8, 8};
    unique_copy(vec.begin(), vec.end(), back_inserter(vec2));
    PrintElements(vec2.begin(), vec2.end(), "vec2");

输出结果:

vec2: 8 8 8 1 2 3 

2.2 inserter()

inserter()会以容器的inser()函数取代assignment运算符。inserter()接受两个参数:一个是容器,另一个是iterator,指向容器内的插入操作起点。

vector<int> vec = {1, 1, 2, 2, 3};
vector<int> vec2 = {8, 8, 8};
unique_copy(vec.begin(), vec.end(), inserter(vec2, vec2.begin()+1));
PrintElements(vec2.begin(), vec2.end(), "vec2");

输出结果:

vec2: 8 1 2 3 8 8

2.3 front_inserter()

front_inserter()会以容器的push_front()函数取代assignment运算符。这个inserter只适用于list与deque:

list<int> lis = {1,2,3};
list<int> lis2 = {8,8,8};
copy(lis.begin(), lis.end(), front_inserter(lis2));
PrintElements(lis2.begin(), lis2.end(), "lis2");

输出结果:

lis2: 3 2 1 8 8 8 
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值