template <std::size_t Count>
constexpr span<element_type, Count>
first() const; // (1)
constexpr span<element_type, dynamic_extent>
first(size_type count) const; // (2)
概要
先頭N個の要素を参照するspan
オブジェクトを取得する。
- (1) : テンプレートパラメータ
Count
で指定された要素数だけ先頭から取り出す - (2) : パラメータ
count
で指定された要素数だけ先頭から取り出す
適格要件
- (1) :
Count <= Extent
がtrue
であること
事前条件
戻り値
(1)であればCount
をN
、(2)であればcount
をN
として、以下と等価:
return {data(), N};
計算量
定数時間
例
#include <iostream>
#include <span>
#include <vector>
int main()
{
std::vector<int> v = {1, 2, 3, 4, 5};
std::span s{v};
// (1) : テンプレート引数として要素数を指定して、先頭3要素を取得する。
// テンプレート内でこのオーバーロードを使用する場合、s.template first<3>(); のように、
// template限定子の指定が必要になることに注意
std::span<int, 3> static_span = s.first<3>();
for (int x : static_span) {
std::cout << x << std::endl;
}
std::cout << std::endl;
// (2) : 引数として要素数を指定して、先頭3要素を取得する
std::span<int, std::dynamic_extent> dynamic_span = s.first(3);
for (int x : dynamic_span) {
std::cout << x << std::endl;
}
}
出力
1
2
3
1
2
3
バージョン
言語
- C++20
処理系
- Clang: 9.0 ✅
- GCC: ??
- Visual C++: ??