std::ranges::views:: counted
|
Definido en el encabezado
<ranges>
|
||
|
inline
constexpr
/*unspecified*/
counted
=
/*unspecified*/
;
|
(desde C++20) | |
|
Firma de llamada
|
||
|
template
<
class
Iterator,
class
DifferenceType
>
requires
/* see below */
|
(desde C++20) | |
Una vista contada presenta una
view
de los elementos del
rango contado
[
i
,
n
)
para algún iterador
i
y entero no negativo
n
.
Un rango contado
[
i
,
n
)
son los
n
elementos que comienzan con el elemento apuntado por
i
y hasta pero sin incluir el elemento, si existe, apuntado por el resultado de
n
aplicaciones de
++
i
.
Si
n
==
0
, el rango contado es válido y vacío. De lo contrario, el rango contado solo es válido si
n
es positivo,
i
es desreferenciable, y
[
++
i
,
--
n
)
es un rango contado válido.
Formalmente, si
it
y
count
son expresiones,
T
es
std::
decay_t
<
decltype
(
(
it
)
)
>
, y
D
es
std::
iter_difference_t
<
T
>
, entonces
-
si
Tmodelainput_or_output_iteratory decltype ( ( count ) ) modela std:: convertible_to < D > ,-
si
Tmodelacontiguous_iterator, entonces views:: counted ( it, count ) es equivalente-expresión a std:: span ( std:: to_address ( it ) , static_cast < std:: size_t > ( static_cast < D > ( count ) ) ) , -
de lo contrario, si
Tmodelarandom_access_iterator, entonces views:: counted ( it, count ) es equivalente-expresión a ranges:: subrange ( it, it + static_cast < D > ( count ) ) , - de lo contrario, views:: counted ( it, count ) es equivalente-expresión a ranges:: subrange ( std:: counted_iterator ( it, count ) , std:: default_sentinel ) .
-
si
- De lo contrario, views:: counted ( it, count ) está mal formado.
Contenidos |
Objetos de punto de personalización
El nombre
views::counted
denota un
objeto de punto de personalización
, que es un
objeto función
constante de un tipo de clase
literal
semiregular
. Consulte
CustomizationPointObject
para más detalles.
Notas
views::counted
no verifica si el rango es lo suficientemente largo para proporcionar todos los
count
elementos: use
views::
take
si esa verificación es necesaria.
Ejemplo
#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'; }
Salida:
1 2 3 2 3 4
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| P2393R1 | C++20 | la conversión implícita desde un tipo integer-class a std:: size_t podría ser inválida | hecha explícita |
Véase también
|
(C++20)
|
una
view
que consiste en los primeros N elementos de otra
view
(plantilla de clase) (objeto adaptador de rango) |
|
(C++20)
|
combina un par iterador-sentinel en una
view
(plantilla de clase) |
|
(C++20)
|
adaptador de iterador que rastrea la distancia hasta el final del rango
(plantilla de clase) |
|
(C++20)
(C++20)
|
devuelve el número de elementos que cumplen criterios específicos
(objeto función de algoritmo) |