iterator

标准库标头<iterator>

此标头是迭代器图书馆。

原语

*。

迭代器[医]特性为迭代器%28类模板%29的属性提供了统一的接口。

输入[医]迭代器[医]标签输出[医]迭代器[医]前向[医]迭代器[医]标签双向[医]迭代器[医]标签随机[医]存取[医]迭代器[医]标记空类类型,用于指示迭代器类别%28类%29

迭代器%28在C++17%29基类中被废弃,以简化简单迭代器所需类型的定义%28类模板%29

适配器

倒向[医]用于反向遍历%28类模板%29的迭代器迭代器适配器

移动[医]迭代器%28C++11%29迭代器适配器,该适配器与rvalue引用%28class模板%29脱节

退回去[医]插入[医]迭代器迭代器适配器,用于插入容器%28类模板%29的末尾

前部[医]插入[医]迭代器迭代器适配器,用于插入容器前面的模板%28类模板%29

插入[医]迭代器迭代器适配器插入容器%28类模板%29

流迭代器

iStream[医]从STD::Basic读取的迭代器输入迭代器[医]iStream%28类模板%29

流[医]迭代器输出迭代器,写入STD::Basic[医]Ostream%28类模板%29

安布夫[医]从STD::Basic读取的迭代器输入迭代器[医]流光%28类模板%29

[医]OStreambuf[医]迭代器输出迭代器,写入STD::Basic[医]流光%28类模板%29

功能

适配器

*。

制造[医]倒向[医]迭代器%28C++14%29创建一个std::反向[医]从参数%28函数模板%29推断的类型迭代器

制造[医]移动[医]迭代器%28C++11%29创建一个std::move[医]从参数%28函数模板%29推断的类型迭代器

前部[医]插入器创建STD::前台[医]插入[医]从参数%28函数模板%29推断的类型迭代器

退回去[医]插入器创建一个std::back[医]插入[医]从参数%28函数模板%29推断的类型迭代器

插入器创建一个std::INSERT[医]从参数%28函数模板%29推断的类型迭代器

操作

将迭代器前进给定距离%28功能%29

距离返回两个迭代器之间的距离%28函数%29

下一个%28C++11%29增量迭代器%28功能%29

PRV%28C++11%29减少迭代器%28功能%29

范围

初学者%28C++11%29%28C++14%29返回一个迭代器到容器的开头或数组%28函数%29

endcend%28C++11%29%28C++14%29将迭代器返回到容器的末尾或数组%28函数%29

返回反向迭代器到容器或数组%28函数%29

rendcrend%28C++14%29返回容器的反向迭代器或数组%28功能%29

非会员运算符

运算符==运算符%21=运算符<运算符<=运算符>>=比较底层迭代器%28函数模板%29

运算符+推进迭代器%28函数模板%29

运算符-计算两个迭代器适配器之间的距离%28函数模板%29。

运算符==运算符%21=运算符<运算符<=运算符>>=比较底层迭代器%28函数模板%29

运算符+推进迭代器%28函数模板%29

运算符-计算两个迭代器适配器之间的距离%28函数模板%29。

运算符==运算符%21=比较两个iStream[医]迭代器%28函数模板%29

运算符==运算符%21=比较两个istreambuf[医]迭代器%28函数模板%29

简介

二次

namespace std { // primitives: template<class Iterator> struct iterator_traits; template<class T> struct iterator_traits<T*>; template<class Category, class T, class Distance = ptrdiff_t, class Pointer = T*, class Reference = T&> struct 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 { }; // iterator operations: template <class InputIterator, class Distance> void advance(InputIterator& i, Distance n template <class InputIterator> typename iterator_traits<InputIterator>::difference_type distance(InputIterator first, InputIterator last template <class ForwardIterator> ForwardIterator next(ForwardIterator x, typename std::iterator_traits<ForwardIterator>::difference_type n = 1 template <class BidirectionalIterator> BidirectionalIterator prev(BidirectionalIterator x, typename std::iterator_traits<BidirectionalIterator>::difference_type n = 1 // predefined iterators: template <class Iterator> class reverse_iterator; template <class Iterator1, class Iterator2> bool operator==( const reverse_iterator<Iterator1>& x, const reverse_iterator<Iterator2>& y template <class Iterator1, class Iterator2> bool operator<( const reverse_iterator<Iterator1>& x, const reverse_iterator<Iterator2>& y template <class Iterator1, class Iterator2> bool operator!=( const reverse_iterator<Iterator1>& x, const reverse_iterator<Iterator2>& y template <class Iterator1, class Iterator2> bool operator>( const reverse_iterator<Iterator1>& x, const reverse_iterator<Iterator2>& y template <class Iterator1, class Iterator2> bool operator>=( const reverse_iterator<Iterator1>& x, const reverse_iterator<Iterator2>& y template <class Iterator1, class Iterator2> bool operator<=( const reverse_iterator<Iterator1>& x, const reverse_iterator<Iterator2>& y template <class Iterator1, class Iterator2> auto operator-( const reverse_iterator<Iterator1>& x, const reverse_iterator<Iterator2>& y) ->decltype(y.base() - x.base() template <class Iterator> reverse_iterator<Iterator> operator+( typename reverse_iterator<Iterator>::difference_type n, const reverse_iterator<Iterator>& x template <class Iterator> reverse_iterator<Iterator> make_reverse_iterator(Iterator i template <class Container> class back_insert_iterator; template <class Container> back_insert_iterator<Container> back_inserter(Container& x template <class Container> class front_insert_iterator; template <class Container> front_insert_iterator<Container> front_inserter(Container& x template <class Container> class insert_iterator; template <class Container> insert_iterator<Container> inserter(Container& x, typename Container::iterator i template <class Iterator> class move_iterator; template <class Iterator1, class Iterator2> bool operator==( const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y template <class Iterator1, class Iterator2> bool operator!=( const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y template <class Iterator1, class Iterator2> bool operator<( const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y template <class Iterator1, class Iterator2> bool operator<=( const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y template <class Iterator1, class Iterator2> bool operator>( const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y template <class Iterator1, class Iterator2> bool operator>=( const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y template <class Iterator1, class Iterator2> auto operator-( const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y) -> decltype(x.base() - y.base() template <class Iterator> move_iterator<Iterator> operator+( typename move_iterator<Iterator>::difference_type n, const move_iterator<Iterator>& x template <class Iterator> move_iterator<Iterator> make_move_iterator(Iterator i // stream iterators: template <class T, class charT = char, class traits = char_traits<charT>, class Distance = ptrdiff_t> class istream_iterator; template <class T, class charT, class traits, class Distance> bool operator==(const istream_iterator<T,charT,traits,Distance>& x, const istream_iterator<T,charT,traits,Distance>& y template <class T, class charT, class traits, class Distance> bool operator!=(const istream_iterator<T,charT,traits,Distance>& x, const istream_iterator<T,charT,traits,Distance>& y template <class T, class charT = char, class traits = char_traits<charT> > class ostream_iterator; template<class charT, class traits = char_traits<charT> > class istreambuf_iterator; template <class charT, class traits> bool operator==(const istreambuf_iterator<charT,traits>& a, const istreambuf_iterator<charT,traits>& b template <class charT, class traits> bool operator!=(const istreambuf_iterator<charT,traits>& a, const istreambuf_iterator<charT,traits>& b template <class charT, class traits = char_traits<charT> > class ostreambuf_iterator; // range access: template <class C> auto begin(C& c) -> decltype(c.begin() template <class C> auto begin(const C& c) -> decltype(c.begin() template <class C> auto end(C& c) -> decltype(c.end() template <class C> auto end(const C& c) -> decltype(c.end() template <class T, size_t N> T* begin(T (&array)[N] template <class T, size_t N> T* end(T (&array)[N] }

二次

类std::iterator_traits

二次

template<class Iterator> struct iterator_traits { typedef typename Iterator::difference_type difference_type; typedef typename Iterator::value_type value_type; typedef typename Iterator::pointer pointer; typedef typename Iterator::reference reference; typedef typename Iterator::iterator_category iterator_category; }; template<class T> struct iterator_traits<T*> { typedef ptrdiff_t difference_type; typedef T value_type; typedef T* pointer; typedef T& reference; typedef random_access_iterator_tag iterator_category; }; template<class T> struct iterator_traits<const T*> { typedef ptrdiff_t difference_type; typedef T value_type; typedef const T* pointer; typedef const T& reference; typedef random_access_iterator_tag iterator_category; };

二次

类std::iterator

二次

template<class Category, class T, class Distance = ptrdiff_t, class Pointer = T*, class Reference = T&> struct iterator { typedef T value_type; typedef Distance difference_type; typedef Pointer pointer; typedef Reference reference; typedef Category iterator_category; };

二次

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 { };

二次

类std::reverse_iterator

二次

template <class Iterator> class reverse_iterator : public iterator<typename iterator_traits<Iterator>::iterator_category, typename iterator_traits<Iterator>::value_type, typename iterator_traits<Iterator>::difference_type, typename iterator_traits<Iterator>::pointer, typename iterator_traits<Iterator>::reference> { public: typedef Iterator iterator_type; typedef typename iterator_traits<Iterator>::difference_type difference_type; typedef typename iterator_traits<Iterator>::reference reference; typedef typename iterator_traits<Iterator>::pointer pointer; reverse_iterator( explicit reverse_iterator(Iterator x template <class U> reverse_iterator(const reverse_iterator<U>& u template <class U> reverse_iterator& operator=(const reverse_iterator<U>& u Iterator base() const; // explicit reference operator*() const; pointer operator->() const; reverse_iterator& operator++( reverse_iterator operator++(int reverse_iterator& operator--( reverse_iterator operator--(int reverse_iterator operator+ (difference_type n) const; reverse_iterator& operator+=(difference_type n reverse_iterator operator- (difference_type n) const; reverse_iterator& operator-=(difference_type n /*unspecified*/ operator[](difference_type n) const; protected: Iterator current; private: Iterator deref_tmp; // exposition only };

二次

类std::back_insert_iterator

二次

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 back_insert_iterator<Container>& operator=(const typename Container::value_type& value back_insert_iterator<Container>& operator=(typename Container::value_type&& value back_insert_iterator<Container>& operator*( back_insert_iterator<Container>& operator++( back_insert_iterator<Container> operator++(int };

二次

类std::front_insert_iterator

二次

template <class Container> class front_insert_iterator : public iterator<output_iterator_tag,void,void,void,void> { protected: Container* container; public: typedef Container container_type; explicit front_insert_iterator(Container& x front_insert_iterator<Container>& operator=(const typename Container::value_type& value front_insert_iterator<Container>& operator=(typename Container::value_type&& value front_insert_iterator<Container>& operator*( front_insert_iterator<Container>& operator++( front_insert_iterator<Container> operator++(int };

二次

类std::insert_iterator

二次

template <class Container> class insert_iterator : public iterator<output_iterator_tag,void,void,void,void> { protected: Container* container; typename Container::iterator iter; public: typedef Container container_type; insert_iterator(Container& x, typename Container::iterator i insert_iterator<Container>& operator=(const typename Container::value_type& value insert_iterator<Container>& operator=(typename Container::value_type&& value insert_iterator<Container>& operator*( insert_iterator<Container>& operator++( insert_iterator<Container>& operator++(int };

二次

类std::move_iterator

二次

template <class Iterator> class move_iterator { public: typedef Iterator iterator_type; typedef typename iterator_traits<Iterator>::difference_type difference_type; typedef Iterator pointer; typedef typename iterator_traits<Iterator>::value_type value_type; typedef typename iterator_traits<Iterator>::iterator_category iterator_category; typedef value_type&& reference; move_iterator( explicit move_iterator(Iterator i template <class U> move_iterator(const move_iterator<U>& u template <class U> move_iterator& operator=(const move_iterator<U>& u iterator_type base() const; reference operator*() const; pointer operator->() const; move_iterator& operator++( move_iterator operator++(int move_iterator& operator--( move_iterator operator--(int move_iterator operator+(difference_type n) const; move_iterator& operator+=(difference_type n move_iterator operator-(difference_type n) const; move_iterator& operator-=(difference_type n /*unspecified*/ operator[](difference_type n) const; private: Iterator current; // exposition only };

二次

© cppreference.com

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

http://en.cppreference.com/w/cpp/Header/iterator