std::ranges::take_view<V>::end
constexpr auto end() requires (!/*simple-view*/<V>);
|
(1) | (seit C++20) |
constexpr auto end() const requires ranges::range<const V>;
|
(2) | (seit C++20) |
Gibt einen Sentinel oder einen Iterator zurück, der das Ende der take_view darstellt. Das Ende der take_view ist entweder eine Position hinter dem count-ten Element im zugrundeliegenden Bereich oder das Ende des zugrundeliegenden Bereichs, falls dieser weniger als count Elemente hat.
take_view::/*sentinel*/<false>, einen std::default_sentinel_t oder einen ranges::iterator_t<V> zurück.take_view::/*sentinel*/<true>, einen std::default_sentinel_t oder einen ranges::iterator_t<const V> zurück.Überladung (1) nimmt nicht an der Überladungsauflösung teil, wenn V ein simple view ist (d. h. wenn V und const V Views mit demselben Iterator- und Sentinel-Typ sind).
Parameter
(keine)
Rückgabewert
Das Ergebnis hängt von den Konzepten ab, die vom möglicherweise const-qualifizierten zugrundeliegenden View-Typ
Base
erfüllt werden, also
V
für
(
1
)
oder
const V
für
(
2
)
.
Sei
base_
die zugrundeliegende Ansicht.
|
Der zugrundeliegende View-Typ
erfüllt ... |
random_access_range
|
||
|---|---|---|---|
| ja | nein | ||
sized_range
|
ja |
ranges::
begin
(
base_
)
+
ranges:: range_difference_t < Base_ > ( this - > size ( ) ) |
std:: default_sentinel |
| nein |
1)
/*sentinel*/
<
false
>
{
ranges::
end
(
base_
)
}
2)
/*sentinel*/
<
true
>
{
ranges::
end
(
base_
)
}
|
||
Beispiel
#include <iostream> #include <iterator> #include <list> #include <ranges> #include <type_traits> namespace ranges = std::ranges; namespace views = std::views; int main() { const auto list1 = {3, 1, 4, 1, 5}; const auto seq1{list1 | views::take(4)}; static_assert(ranges::sized_range<decltype(seq1)> and 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(); ++it) std::cout << *it << ' '; std::cout << '\n'; std::list list2{2, 7, 1, 8, 2}; const auto seq2{list2 | views::take(4)}; static_assert(ranges::sized_range<decltype(seq2)> and not 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; ++it) std::cout << *it << ' '; std::cout << '\n'; }
Ausgabe:
3 1 4 1 2 7 1 8
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 |
|---|---|---|---|
| P2393R1 | C++20 | implizite Konvertierungen zwischen vorzeichenbehafteten und vorzeichenlosen Integer-Class-Typen könnten fehlschlagen | explizit gemacht |
Siehe auch
|
gibt einen Iterator zum Anfang zurück
(öffentliche Elementfunktion) |
|
|
(C++20)
|
Iterator-Adapter, der den Abstand zum Ende des Bereichs verfolgt
(Klassentemplate) |
|
(C++20)
|
vergleicht einen Sentinel mit einem von
take_view::begin
zurückgegebenen Iterator
(Funktion) |