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
repräsentiert. Das Ende der
take_view
ist entweder eins nach dem
count
ten
Element im zugrunde liegenden Bereich oder das Ende des zugrunde liegenden Bereichs, falls dieser weniger als
count
Elemente besitzt.
Overload
(1)
nimmt nicht an der Überladungsauflösung teil, wenn
V
eine
simple view
ist (das heißt, wenn
V
und
const V
Views mit denselben Iterator- und Sentinel-Typen sind).
Inhaltsverzeichnis |
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) |