首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

std::input_iterator_tag

Defined in header <iterator>

?

?

struct input_iterator_tag { };

?

?

struct output_iterator_tag { };

?

?

struct forward_iterator_tag : public input_iterator_tag { };

?

?

struct bidirectional_iterator_tag : public forward_iterator_tag { };

?

?

struct random_access_iterator_tag : public bidirectional_iterator_tag { };

?

?

定义迭代器的类别。每个标记都是空类型,对应于五个迭代器类别中的一个:

  • input_iterator_tag对应于InputIterator...
  • output_iterator_tag对应于OutputIterator...
  • forward_iterator_tag对应于ForwardIterator...
  • bidirectional_iterator_tag对应于BidirectionalIterator...
  • random_access_iterator_tag对应于RandomAccessIterator...

Iterator类别标记携带的信息可用于为类别所隐含的特定需求集选择最有效的算法。

对于每个迭代器类型,std::iterator_traits<Iterator>::iterator_category是可用的,这是这五种标记类型之一的别名。

Notes There is no separate tag for ContiguousIterator.

(since C++17)

基于迭代器类别标记的算法选择的常用技术是使用Dispatcher函数%28。std::enable_if29%。

二次

代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <list>
#include <iterator>
 
template< class BDIter >
void alg(BDIter, BDIter, std::bidirectional_iterator_tag)
{
    std::cout << "alg() called for bidirectional iterator\n";
}
 
template <class RAIter>
void alg(RAIter, RAIter, std::random_access_iterator_tag)
{
    std::cout << "alg() called for random-access iterator\n";
}
 
template< class Iter >
void alg(Iter first, Iter last)
{
    alg(first, last,
        typename std::iterator_traits<Iter>::iterator_category());
}
 
int main()
{
    std::vector<int> v;
    alg(v.begin(), v.end());
 
    std::list<int> l;
    alg(l.begin(), l.end());
 
//    std::istreambuf_iterator<char> i1(std::cin), i2;
//    alg(i1, i2); // compile error: no matching function for call
}

二次

产出:

二次

代码语言:javascript
复制
alg() called for random-access iterator
alg() called for bidirectional iterator

二次

另见

iterator (deprecated in C++17)

base class to ease the definition of required types for simple iterators (class template)

iterator_traits

provides uniform interface to the properties of an iterator (class template)

代码语言:txt
复制
 ? cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com