stl之iterator_category
Posted acwarming
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stl之iterator_category相关的知识,希望对你有一定的参考价值。
首先要知道 stl 的算法是什么?
算法(Algorithm)是 function template,Algorithm 看不见容器(Containers),所以要从 iterator 取信息,iterator 必须回答 Algorithm 的问题来进行操作
iterator 的 iterator_category
iterator_category 对算法的影响
以 distance 函数为例,如果通过 iterator_trait 取得的 iterator_category 是 random_access_iterator_tag,那直接就特化用 last - first 相减就可以;如果是 input_iterator_tag 那就需要从 first++ 一直到 last 才能得到结果,他们之间的运算效率不一样
在写 distance 返回类型时也不要随便放,可以来问 iterator_traits 的 different_type
下面是以 advance 为例的代码参考
那为什么一共有 4 种 category(除了output_iterator_tag),为什么没有把其他的都写出来呢?
是因为他们之间有继承关系,是 is a,总有一种 category 会对应起来
iterator_category 和 type traits 对算法的影响
以上是关于stl之iterator_category的主要内容,如果未能解决你的问题,请参考以下文章