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 */
constexpr /*span-or-subrange*/ counted( Iterator&& it, DifferenceType&& count );
|
(desde C++20) | |
Una vista countada presenta una vista de los elementos del rango contado [i, n) para algún iterador i y un entero no negativo n.
Un rango contado [i, n) son los n elementos que comienzan con el elemento al que apunta i y hasta, sin incluir, el elemento, si lo hay, al que apunta el resultado de n aplicaciones de ++i.
Si n == 0, el rango contado es válido y está 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
Tmodela input_or_output_iterator ydecltype((count))modelastd::convertible_to<D>,- si
Tmodela contiguous_iterator, entoncesviews::counted(it, count)es equivalente en expresión astd::span(std::to_address(it), static_cast<std::size_t>(static_cast<D>(count))), - de lo contrario, si
Tmodela random_access_iterator, entoncesviews::counted(it, count)es equivalente en expresión aranges::subrange(it, it + static_cast<D>(count)), - de lo contrario,
views::counted(it, count)es equivalente en expresión aranges::subrange(std::counted_iterator(it, count), std::default_sentinel).
- si
- De lo contrario,
views::counted(it, count)está mal formado.
Objetos punto de personalización
El nombre views::counted denota un objeto punto de personalización, que es un objeto función const de un tipo de clase literal semirregular. 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 cambian el comportamiento se aplicaron retroactivamente a los estándares C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| P2393R1 | C++20 | la conversión implícita de un tipo de clase entero a std::size_t podría ser inválida
|
hecho explícito |
Véase también
(C++20) |
una vista que consta de los primeros N elementos de otra vista (plantilla de clase) (objeto adaptador de rango) |
(C++20) |
combina un par iterador-centinela en una vista (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) |