版权声明:本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名elloop(包含链接)
本系列文章的目录在这里:目录. 通过目录里可以对STL总体有个大概了解
#前言
本文介绍了STL中的迭代器适配器(iterator adapter)的概念及其使用方法示例。迭代器适配器可以和标准库中的算法配合使用,达到一些特殊的效果。
迭代器适配器分为以下几类:
-
reverse iterator : 反向迭代器
-
insert iterator : 插入型迭代器
-
stream iterator : 流迭代器
-
move iterator : 移动型迭代器
reverse iterator 反向迭代器
顾名思义,reverse就是反其道而行之。正常的迭代器是从前往后的方向递增,而反向迭代器则是从后向前递增的。支持双向迭代的容器通常都有rbegin(), rend()这对接口,它们的返回值就是reverse iterator。使用这对反向迭代器来遍历容器就会实现从后向前的效果。
insert iterator 插入型迭代器
插入型迭代器可以使标准库中算法对元素进行赋值操作的语义转化为对元素的插入操作语义。因为它们会改变容器,它们需要使用一个容器来初始化,如下面的代码所示:
插入型迭代器分为以下三种:
back_insert_iterator
or back inserter. 在后面插入型迭代器
会对初始化它的容器调用push_back
以完成后面插入元素的操作。
front_insert_iterator
or front inserter. 在前面插入型迭代器
与back_insert_iterator
类似,此迭代器调用容器的push_front
来完成在前面插入元素的操作。
insert_iterator
or general inserter. 通用型插入迭代器
最后这种插入型迭代器是最通用的迭代器, 它对容器调用insert(value, pos)方法。使得没有push_back
, push_front
操作的容器,比如关联式容器能够使用这种迭代器。它相对于前两种适配器,需要一个额外的参数pos以指示插入位置。
stream iterator 流迭代器
分为:ostream_iterator
和istream_iterator
.
ostream_iterator
输出流迭代器
istream_iterator
输入流迭代器
move iterator
since C++11, 移动语义的提出大大提高了一些涉及到转发参数的函数调用过程之中(perfect forwarding完美转发)参数传递的效率,通过把元素内部底层的东西移动到新的元素来避免拷贝开销。因为这个原因也提供了移动的迭代器适配器以实现需要移动语义的场合,下面是一段示意的代码:
源码与参考链接
欢迎访问github博客,与本站同步更新