std:: iterator_traits <std::counted_iterator>
| Iterator concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator primitives | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Algorithm concepts and utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Non-member functions | ||||
|
(C++20)
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
||||
| Helper classes | ||||
|
iterator_traits
<std::counted_iterator>
(C++20)
|
|
Défini dans l'en-tête
<iterator>
|
||
|
template
<
std::
input_iterator
I
>
requires
/* voir ci-dessous */
|
(depuis C++20) | |
Hérite des propriétés de la spécialisation personnalisée (générée soit à partir d'une spécialisation partielle standard, soit d'une spécialisation définie par le programme)
std::
iterator_traits
<
I
>
, avec le type membre
pointer
ajusté, où
I
modélise
input_iterator
.
Notamment, le
iterator_concept
(s'il est présent) et le
iterator_category
sont hérités de
std::
iterator_traits
<
I
>
.
La condition dans la clause requires est true si et seulement si std:: iterator_traits < I > n'est pas généré à partir du modèle primaire.
Table des matières |
Remarque
Avant
P2259R1
, cette spécialisation était utilisée même si
std::
iterator_traits
<
I
>
est générée à partir du modèle primaire. Par conséquent, lors du test de
std::
counted_iterator
<
I
>
par rapport à un concept d'itérateur (par exemple
forward_iterator
), la détermination de
/*ITER_CONCEPT*/
ne prend pas en compte
I::iterator_concept
, et donc
std::
counted_iterator
<
I
>
se comporte parfois de manière erronée comme s'il ne pouvait pas modéliser ce concept. Ce comportement incorrect est implémenté dans libstdc++ avant la version 10.4, et dans MSVC STL avant VS 2022 17.0 Preview 3.
La bibliothèque standard fournit des spécialisations partielles de std::iterator_traits pour les types pointeurs, std::counted_iterator , et std::common_iterator .
Exemple
#include <iterator> #include <list> #include <type_traits> #include <vector> int main() { std::vector v{1, 2, 3, 4}; std::list l{1, 2, 3, 4}; std::counted_iterator iv{v.begin(), 3}; std::counted_iterator il{l.begin(), 3}; static_assert(std::is_same<int*, std::iterator_traits<decltype(iv)>::pointer>()); static_assert(std::is_same<void, std::iterator_traits<decltype(il)>::pointer>()); }
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| P2259R1 | C++20 |
il n'y a pas de clause requires
pointer
est défini inconditionnellement comme
void
|
contrainte ajoutée |
Voir aussi
|
fournit une interface uniforme pour les propriétés d'un itérateur
(modèle de classe) |