std::iterator_traits
Материал из cppreference.com
![]() |
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google. Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Щёлкните здесь, чтобы увидеть английскую версию этой страницы. (Вы можете помочь в исправлении ош��бок и улучшении перевода. Для инструкций перейдите по ссылке.) |
Определено в заголовочном файле <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) |
базовый класс для упрощения определения требуемых типов для простых итераторов (шаблон класса) |
пустые типы классов, используемые для обозначения категорий итераторов (класс) |