close
Пространства имён
Варианты
Действия

std::iterator_traits

Материал из cppreference.com

<metanoindex/>

 
 
Библиотека итераторов
Концепты итераторов
Примитивы итераторов
Концепты алгоритмов и утилиты
Косвенно вызываемые концепты
Общие требования к алгоритмам
Утилиты
(C++20)
Адаптеры итераторов
Потоковые итераторы
Точки настройки итераторов
Операции итераторов
(C++11)
(C++11)
Доступ к диапазону
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
(C++17)
 
<tbody> </tbody>
Определено в заголовочном файле <iterator>
template< class Iterator> struct iterator_traits;
template< class T > struct iterator_traits<T*>;
template< class T > struct iterator_traits<const T*>;
std::iterator_traits является классом черта, которая предоставляет единый интерфейс к свойствам типов итераторов. Это позволяет реализовать алгоритмы только в терминах итераторов.
Оригинал:
std::iterator_traits is the type trait class that provides uniform interface to the properties of iterator types. This makes it possible to implement algorithms only in terms of iterators.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

Типы-члены

Тип члена Определение
difference_type Iterator::difference_type
value_type Iterator::value_type
pointer Iterator::pointer
reference Iterator::reference
iterator_category Iterator::iterator_category

Специализации

Этот тип черта может быть специализируется на предоставленные пользователем типы, которые могут быть использованы в качестве итераторов. Стандартная библиотека предоставляет два частичной специализации для типов указателей T *, что позволяет использовать все итератор на основе алгоритмов с сыром указателей.
Оригинал:
This type trait may be specialized for user-provided types that may be used as iterators. The standard library provides two partial specializations for pointer types T*, which makes it possible to use all iterator-based algorithms with raw pointers.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

T * типах специализации членов

Тип члена Определение
difference_type std::ptrdiff_t
value_type T
pointer T*
reference T&
iterator_category std::random_access_iterator_tag

Const T * типы специализации членов

Тип члена Определение
difference_type std::ptrdiff_t
value_type T
pointer const T*
reference const T&
iterator_category std::random_access_iterator_tag

Пример

общего назначения обратном () для реализации двунаправленные итераторы
Оригинал:
general-purpose reverse() implementation for bidirectional iterators
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

#include <iostream>
#include <iterator>
#include <vector>
#include <list>

template<class BDIter>
void my_reverse(BDIter first, BDIter last)
{
    typename std::iterator_traits<BDIter>::difference_type n = std::distance(first, last);
    --n;
    while(n > 0) {
        typename std::iterator_traits<BDIter>::value_type tmp = *first;
        *first++ = *--last;
        *last = tmp;
        n -= 2;
    }
}

int main()
{
    std::vector<int> v{1,2,3,4,5};
    my_reverse(v.begin(), v.end());
    for(int n : v)
        std::cout << n << ' ';
    std::cout << '\n';

    std::list<int> l{1,2,3,4,5};
    my_reverse(l.begin(), l.end());
    for(auto n : l)
        std::cout << n << ' ';
    std::cout << '\n';

//    std::istreambuf_iterator<char> i1(std::cin), i2;
//    my_reverse(i1, i2); // compilation error

}

Вывод:

5 4 3 2 1
5 4 3 2 1

См. также

(устарело в C++17)
базовый класс для упрощения определения требуемых типов для простых итераторов
(шаблон класса) [править]
пустые типы классов, используемые для обозначения категорий итераторов
(класс) [править]