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)
|
|
Definiert im Header
<iterator>
|
||
|
template
<
std::
input_iterator
I
>
erfordert
/* siehe unten */
|
(seit C++20) | |
Erbt die Eigenschaften von angepassten (erzeugt entweder durch eine Standard-Partialspezialisierung oder eine programmdefinierte Spezialisierung)
std::
iterator_traits
<
I
>
, wobei der Member-Typ
pointer
angepasst wird, wobei
I
das Konzept
input_iterator
modelliert.
Insbesondere werden das
iterator_concept
(falls vorhanden) und das
iterator_category
von
std::
iterator_traits
<
I
>
geerbt.
Die Bedingung in der Requires-Klausel ist true genau dann, wenn std:: iterator_traits < I > nicht von der primären Template generiert wird.
Inhaltsverzeichnis |
Hinweis
Vor
P2259R1
wurde diese Spezialisierung verwendet, selbst wenn
std::
iterator_traits
<
I
>
von der primären Template generiert wird. Infolgedessen wird bei der Überprüfung von
std::
counted_iterator
<
I
>
gegen ein Iterator-Konzept (z.B.
forward_iterator
) die Bestimmung von
/*ITER_CONCEPT*/
ohne Berücksichtigung von
I::iterator_concept
durchgeführt, und daher verhält sich
std::
counted_iterator
<
I
>
manchmal fälschlicherweise so, als ob es dieses Konzept nicht modellieren könnte. Dieses fehlerhafte Verhalten wurde in libstdc++ vor Version 10.4 und in MSVC STL vor VS 2022 17.0 Preview 3 implementiert.
Die Standardbibliothek bietet partielle Spezialisierungen von std::iterator_traits für Zeigertypen, std::counted_iterator , und std::common_iterator an.
Beispiel
#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>()); }
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| P2259R1 | C++20 |
es gibt keine Requires-Klausel
pointer
wird bedingungslos als
void
definiert
|
Constraint hinzugefügt |
Siehe auch
|
bietet eine einheitliche Schnittstelle für die Eigenschaften eines Iterators
(Klassentemplate) |