STL与泛型编程<十一>:Insert(安插)迭代器

介绍

用来将“赋新值操作”转换为“安插新值”操作,通过这种迭代器,算法可以执行安插(insert)操作而非覆盖(overwrite)操作。所有insert迭代器都属于output迭代器。
- Insert迭代器的功能
通常算法会将数值赋值给标的迭代器,如copy()算法

namespace std
{
    template<typename InputIterator, typename OutputIterator>
    OutputIterator copy(InputIterator from_pos, InputIterator from_end, OutputIterator to_pos)
    {
        while (from_pos != from_end)
        {
            *to_pos = *from_pos;
            ++from_pos;
            ++to_pos;
        }
        return to_pos;
    }
}

需要注意的是赋值操作会被转换为安插操作,事实上insert迭代器会调用容器的push_back(),push_front()或insert()成员函数。
- 迭代器的种类
这里写图片描述
事实上它们各自调用所属容器中不同的成员函数,所以insert迭代器初始化时一定要清楚知道自己所属的容器哪一种。每一种insert迭代器都可以由一个对应的便捷函数加以生成和初始化当然,容器本身必须支持insert迭代器所调用的函数,否则insert迭代器就不可用,因此back inserters只能用在vector,deque,list,string上,front inserters只能用在deque和list上。

back inserters

声明

template <class Container> class back_insert_iterator;
/*
可知其template需要一个容器型别
*/

实现如下

template <class Container>
class back_insert_iterator : public iterator<output_iterator_tag,void,void,void,void>
{
    protected:
        Container* container;

    public:
        typedef Container container_type;

        explicit back_insert_iterator (Container& x) : container(&x) {} //构造函数,需要带入容器型别为参数 

        back_insert_iterator<Container>& operator= (typename Container::const_reference value)  //赋值时调用容器的push_back()操作 
        {
            container->push_back(value); 
            return *this; 
        }

        back_insert_iterator<Container>& operator* () //什么也不做,只是返回这个对象 
        { 
            return *this; 
        }

        back_i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值