Именованные требования C++: LegacyRandomAccessIterator
LegacyRandomAccessIterator — это LegacyBidirectionalIterator, который можно переместить так, чтобы он указывал на любой элемент за постоянное время.
Если LegacyRandomAccessIterator it происходит из Container, то it имеет такой же value_type, как контейнер, поэтому разыменование (*it) получает value_type контейнера.
Указатель на элемент массива удовлетворяет всем требованиям LegacyRandomAccessIterator.
Требования
Тип It удовлетворяет требованиям LegacyRandomAccessIterator, если
- Тип
Itудовлетворяет требованиям LegacyBidirectionalIterator
И, если заданы
-
value_type, тип, обозначаемый как std::iterator_traits<It>::value_type -
difference_type, тип, обозначаемый как std::iterator_traits<It>::difference_type -
reference, тип, обозначаемый как std::iterator_traits<It>::reference -
i,a,b, объекты типаItили constIt -
r, lvalue типаIt -
n, целое число типаdifference_type
Следующие выражения должны быть допустимы и иметь указанные эффекты:
| Выражение | Тип возвращаемого значения | Операционная семантика | Примечания | ||||
|---|---|---|---|---|---|---|---|
r += n |
It& |
difference_type m = n; if (m >= 0) while (m--) ++r; else while (m++) --r; return r; |
|
||||
a + n
|
It |
It temp = a; return temp += n; |
|
||||
r -= n | It& |
return r += -n; | Абсолютное значение n должно находиться в диапазоне представимых значений difference_type. |
||||
i - n | It | It temp = i; return temp -= n; | |||||
b - a | difference_type |
return n;(см. предусловие) | Предусловие:
Постусловие:
|
||||
i[n] | преобразуемо в reference
| *(i + n) | |||||
a < b |
| Эквивалентно return b - a > 0; | Предусловие:
Отношение строгого полного порядка:
|
||||
a > b |
|
b < a | Отношение полного порядка, противоположное a < b |
||||
a >= b |
|
!(a < b) | |||||
a <= b |
|
!(a > b) |
Из приведённых выше правил следует, что LegacyRandomAccessIterator также реализует LessThanComparable.
Изменяемый LegacyRandomAccessIterator — это LegacyRandomAccessIterator, который дополнительно удовлетворяет требованиям LegacyOutputIterator.
КонцептДля определения
где концепт | (начиная с C++20) |
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены ретроспективно к ранее опубликованным стандартам C++.
| DR | Применяется к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
|
LWG 299 (N3066) | C++98 | тип возвращаемого значения a[n] должен былбыть преобразуемым в constvalue_type& | тип возвращаемого значения должен быть преобразуемым в reference |
| LWG 448 | C++98 | тип возвращаемого значения a[n] должен былбыть преобразуемым в value_type | тип возвращаемого значения должен быть преобразуемым в constvalue_type&[1] |
| LWG 1079 | C++98 |
b - a определялся с использованием a < b,что приводило к циклическому определению | из определения удалено a < b |
|
LWG 2114 (P2167R3) | C++98 | преобразование в bool было недостаточным для отражения ожиданий реализаций | требования усилены |
- Предложение LWG 299 было повторно открыто после принятия этого решения.
См. также
|
(C++20) | определяет, что bidirectional_iterator является итератором произвольного доступа, поддерживающим перемещение за постоянное время и индексирование (концепт) |
| Библиотека итераторов | предоставляет определения итераторов, характеристик итераторов, адаптеров и вспомогательных функций |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/RandomAccessIterator