- span[meta header]
- std[meta namespace]
- span[meta class]
- function[meta id-type]
- cpp20[meta cpp]
constexpr iterator end() const noexcept; // (1)
friend constexpr iterator end(span s) noexcept; // (2)末尾要素の次を指すイテレータを取得する。
- (1) : メンバ関数として、末尾要素の次を指すイテレータを取得する
- (2) : ADLで探索される関数として、末尾要素の次を指すイテレータを取得する
- (1) :
spanオブジェクトが参照している範囲の、末尾要素の次を参照するイテレータを返す - (2) :
return s.end();
投げない
定数時間
#include <iostream>
#include <span>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> v = {1, 2, 3, 4, 5};
// vの先頭3要素を部分シーケンスとして参照する
std::span<int> s = std::span(v).first(3);
// (1)
std::for_each(s.begin(), s.end(), [](int x) {
std::cout << x << ',';
});
std::cout << std::endl;
// (2) 名前空間修飾なしで、ADLで呼び出す
std::for_each(begin(s), end(s), [](int x) {
std::cout << x << ',';
});
std::cout << std::endl;
// (1)に対する、<iterator>で定義される汎用的なstd::begin()/std::end()の呼び出し
std::for_each(std::begin(s), std::end(s), [](int x) {
std::cout << x << ',';
});
std::cout << std::endl;
// (2) 範囲for文は、ADLでbegin()/end()を探索する
for (int x : s) {
std::cout << x << ',';
}
std::cout << std::endl;
}- s.end[color ff0000]
- end(s)[color ff0000]
- s.begin()[link begin.md]
- begin(s)[link begin.md]
- first[link first.md]
1,2,3,
1,2,3,
1,2,3,
1,2,3,
- C++20
- Clang: 9.0 [mark verified]
- GCC: ??
- Visual C++: ??