std::ranges::views:: counted
|
Défini dans l'en-tête
<ranges>
|
||
|
inline
constexpr
/*unspecified*/
counted
=
/*unspecified*/
;
|
(depuis C++20) | |
|
Signature d'appel
|
||
|
template
<
class
Iterator,
class
DifferenceType
>
requires
/* voir ci-dessous */
|
(depuis C++20) | |
Une vue comptée présente une
view
des éléments de l'
intervalle compté
[
i
,
n
)
pour un itérateur
i
et un entier non négatif
n
.
Une plage comptée
[
i
,
n
)
représente les
n
éléments commençant par l'élément pointé par
i
et allant jusqu'à, mais sans inclure, l'élément pointé par le résultat de
n
applications de
++
i
.
Si
n
==
0
, la plage comptée est valide et vide. Sinon, la plage comptée n'est valide que si
n
est positif,
i
est déréférençable, et
[
++
i
,
--
n
)
est une plage comptée valide.
Formellement, si
it
et
count
sont des expressions,
T
est
std::
decay_t
<
decltype
(
(
it
)
)
>
, et
D
est
std::
iter_difference_t
<
T
>
, alors
-
si
Tmodéliseinput_or_output_iteratoret decltype ( ( count ) ) modélise std:: convertible_to < D > ,-
si
Tmodélisecontiguous_iterator, alors views:: counted ( it, count ) est équivalent-expression à std:: span ( std:: to_address ( it ) , static_cast < std:: size_t > ( static_cast < D > ( count ) ) ) , -
sinon, si
Tmodéliserandom_access_iterator, alors views:: counted ( it, count ) est équivalent-expression à ranges:: subrange ( it, it + static_cast < D > ( count ) ) , - sinon, views:: counted ( it, count ) est équivalent-expression à ranges:: subrange ( std:: counted_iterator ( it, count ) , std:: default_sentinel ) .
-
si
- Sinon, views:: counted ( it, count ) est mal formé.
Sommaire |
Objets de point de personnalisation
Le nom
views::counted
désigne un
objet de point de personnalisation
, qui est un
objet fonction
constant d'un type de classe
littéral
semiregular
. Voir
CustomizationPointObject
pour plus de détails.
Notes
views::counted
ne vérifie pas si la plage est suffisamment longue pour fournir tous les
count
éléments : utilisez
views::
take
si cette vérification est nécessaire.
Exemple
#include <iostream> #include <ranges> int main() { const int a[]{1, 2, 3, 4, 5, 6, 7}; for (int i : std::views::counted(a, 3)) std::cout << i << ' '; std::cout << '\n'; const auto il = {1, 2, 3, 4, 5}; for (int i : std::views::counted(il.begin() + 1, 3)) std::cout << i << ' '; std::cout << '\n'; }
Sortie :
1 2 3 2 3 4
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 | Applicable à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| P2393R1 | C++20 | la conversion implicite d'un type entier-classe vers std:: size_t pourrait être invalide | rendue explicite |
Voir aussi
|
(C++20)
|
une
view
composée des N premiers éléments d'une autre
view
(modèle de classe) (objet adaptateur de gamme) |
|
(C++20)
|
combine une paire itérateur-sentinelle en une
view
(modèle de classe) |
|
(C++20)
|
adaptateur d'itérateur qui suit la distance jusqu'à la fin de la gamme
(modèle de classe) |
|
(C++20)
(C++20)
|
retourne le nombre d'éléments satisfaisant des critères spécifiques
(objet fonction algorithme) |