C++ named requirements: LegacyRandomAccessIterator
LegacyRandomAccessIterator — это LegacyBidirectionalIterator , который может быть перемещён для указания на любой элемент за константное время.
Если
LegacyRandomAccessIterator
it
происходит из
Container
, тогда
it
's
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или const It -
r
, lvalue типа
It -
n
, целое число типа
difference_type
Следующие выражения должны быть корректными и иметь указанные эффекты:
| Выражение | Тип возвращаемого значения | Операционная семантика | Примечания | ||||
|---|---|---|---|---|---|---|---|
| r + = n |
It&
|
difference_type m
=
n
;
if
(
m
>=
0
)
while
(
m
--
)
++
r
;
|
|
||||
|
a
+
n
n + a |
It
|
It temp
=
a
;
return temp + = n ; |
|
||||
| r - = n |
It&
|
return r + = - n ; |
Абсолютное значение
n
должно находиться в диапазоне представимых значений
difference_type
.
|
||||
| i - n |
Это
|
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 .
КонцептДля определения std::iterator_traits определяется следующий концепт, используемый только для демонстрации.
где концепт, используемый только для демонстрации,
|
(начиная с C++20) |
Отчеты о дефектах
Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение в опубликованной версии | Корректное поведение |
|---|---|---|---|
|
LWG 299
( N3066 ) |
C++98 |
возвращаемый тип
a
[
n
]
требовал
конвертируемости в const value_type & |
возвращаемый тип должен быть
конвертируем в
reference
|
| LWG 448 | C++98 |
возвращаемый тип
a
[
n
]
требовал
конвертируемости в
value_type
|
возвращаемый тип должен быть
конвертируем в const value_type & [1] |
| LWG 1079 | C++98 |
b
-
a
определялось через
a
<
b
,
что приводило к циклическому определению |
исключено a < b из определения |
|
LWG 2114
( P2167R3 ) |
C++98 | конвертируемость в bool была слишком слабой для отражения ожиданий реализаций | требования усилены |
- ↑ LWG issue 299 был переоткрыт после данного решения.
Смотрите также
|
(C++20)
|
определяет, что
bidirectional_iterator
является итератором произвольного доступа, поддерживающим продвижение за постоянное время и индексацию
(концепт) |
| Iterator library | предоставляет определения для итераторов, характеристик итераторов, адаптеров и служебных функций |