首页 > 其他 > 详细

STL中容器迭代器类型

时间:2021-03-26 22:59:16      阅读:69      评论:0      收藏:0      [点我收藏+]

一、前言  

  在最近的几次校招面试中,问道同学用到哪些容器,大多同学都能顺口的回答出来;但是问vector,list和map容器的迭代器类型分别是什么时,同学们似乎都回到到了迭代器的本质上。其实并没这么复杂,如果经常使用STL算法的同学知道,算法是通过迭代器操作容器的元素的,但是不同的算法对迭代器类型是相关要求的,如果不仔细的话,使用就好出现很大的问题。比如:

1 template <class InputIterator, class OutputIterator>
2   OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result);

  std::copy要求的是输入和输出迭代器类型即可

1 template <class BidirectionalIterator1, class BidirectionalIterator2>
2   BidirectionalIterator2 copy_backward (BidirectionalIterator1 first,
3                                         BidirectionalIterator1 last,
4                                         BidirectionalIterator2 result)

  std::copy_backward则要求是双向迭代器类型。

  通过上面的两个例子,主要是考察同学对STL使用的熟练程度如何。

二、STL中容器的迭代器类型

容器 迭代器类型
std::array

random_access_iterator(随机迭代器)

std::vector
random_access_iterator(随机迭代器)
std::deque random_access_iterator(随机迭代器)
std::forward_list forward_iterator(前向迭代器)
std::list bidirectional_iterator(双向迭代器)
std::stack(容器适配器) /
std::queue(std::priority_queue)(容器适配器) /
std::set bidirectional_iterator(双向迭代器)
std::multiset bidirectional_iterator(双向迭代器)
std::map bidirectional_iterator(双向迭代器)
std::multimap bidirectional_iterator(双向迭代器)
std::unordered_set forward_iterator(前向迭代器)
std::unordered_multiset forward_iterator(前向迭代器)
std::unordered_map forward_iterator(前向迭代器)
std::unordered_multimap forward_iterator(前向迭代器)

  上面就是STL中容器的迭代器类型,以后在使用STL算法前只要清楚容器迭代器类型就可以知道当前容器是否可以正常使用该算法了。其实还有一个input_iterator和output_iterator类型,一般用于输入和输出流中;此处不进行详细介绍。

三、迭代器类型关系

  下面是VS2019中STL源码关于各种迭代器类型的继承关系定义,上面各种容器(不包括容器适配器)的迭代器类型都可以在STL源码中查询到。

 1 / ITERATOR STUFF (from <iterator>)
 2 // ITERATOR TAGS (from <iterator>)
 3 struct input_iterator_tag {};
 4 
 5 struct output_iterator_tag {};
 6 
 7 struct forward_iterator_tag : input_iterator_tag {};
 8 
 9 struct bidirectional_iterator_tag : forward_iterator_tag {};
10 
11 struct random_access_iterator_tag : bidirectional_iterator_tag {};

  对于std:::copy要求输入迭代器类型,STL容器都适用;但是std::copy_backward算法只能部分容器可以使用。

STL中容器迭代器类型

原文:https://www.cnblogs.com/smartNeo/p/14584280.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!