std::ranges::take_view<V>::end
constexpr auto end() requires (!__SimpleView<V>);
|
(1) | (desde C++20) |
constexpr auto end() const requires ranges::range<const V>;
|
(2) | (desde C++20) |
Devuelve un centinela o un iterador que representa el final de la vista take_view. El final de la vista take_view es o bien uno después del count-ésimo elemento en el rango subyacente, o el final del rango subyacente si este último tiene menos de count elementos.
take_view::/*sentinel*/<false>, un std::default_sentinel_t, o un ranges::range_iterator_t<V>.take_view::/*sentinel*/<true>, un std::default_sentinel_t, o un ranges::range_iterator_t<const V>.La sobrecarga (1) no participa en la resolución de sobrecarga si V es una vista simple (es decir, si V y const V son vistas con el mismo tipo iterador y tipo centinela).
Parámetros
(Ninguno)
Valor de retorno
El resultado depende de los conceptos satisfechos por el tipo (posiblemente calificado const) de la vista subyacente Base_, que es V (para la sobrecarga (1)) o const V (para la sobrecarga (2)).
Sea base_ la vista subyacente.
| La vista subyacente satisface ... | random_access_range
| ||
|---|---|---|---|
| Sí | No | ||
sized_range
|
Sí | ranges::begin(base_) + ranges::range_difference_t<Base_>(this->size())
|
std::default_sentinel
|
| No |
1)
/*sentinel*/<false>{ranges::end(base_)}2)
/*sentinel*/<true>{ranges::end(base_)} |
Ejemplo
#include <list>
#include <ranges>
#include <iterator>
#include <iostream>
#include <type_traits>
int main() {
const auto list1 = { 3, 1, 4, 1, 5 };
const auto seq1 = list1 | std::views::take(4);
static_assert(std::ranges::sized_range<decltype(seq1)> and
std::ranges::random_access_range<decltype(seq1)> and
std::is_same_v<decltype(seq1.end()), decltype(list1.end())>);
for (auto it = seq1.begin(); it != seq1.end(); std::cout << *it++ << ' '){ }
std::cout << '\n';
std::list list2 = { 2, 7, 1, 8, 2 };
const auto seq2 = list2 | std::views::take(4);
static_assert(std::ranges::sized_range<decltype(seq2)> and
not std::ranges::random_access_range<decltype(seq2)> and
std::is_same_v<decltype(seq2.end()), std::default_sentinel_t>);
for (auto it = seq2.begin(); it != std::default_sentinel; std::cout << *it++ << ' '){ }
std::cout << '\n';
}
Salida:
3 1 4 1
2 7 1 8
Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| P2393R1 | C++20 | Las conversiones implícitas entre tipos enteros con signo y sin signo podrían fracasar. | Se hicieron explícitas. |
Véase también
(C++20) |
Devuelve un iterador al comienzo. (función miembro pública) |
(C++20) |
Adaptador de iterador que rastrea la distancia hasta el final del rango. (plantilla de clase) |
(C++20) |
Compara un centinela con un iterador devuelto desde take_view::begin. (función) |