template <std::size_t Count>
constexpr span<element_type, Count>
last() const; // (1)
constexpr span<element_type, dynamic_extent>
last(size_type count) const; // (2)
概要
末尾N個の要素を参照するspanオブジェクトを取得する。
- (1) : テンプレートパラメータ
Countで指定された要素数だけ末尾から取り出す - (2) : パラメータ
countで指定された要素数だけ末尾から取り出す
適格要件
- (1) :
Count <= Extentがtrueであること
堅牢化された事前条件
戻り値
(1)であればCountをN、(2)であればcountをNとし、Rを戻り値の型として、以下と等価:
計算量
定数時間
例
#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 last<3>(); のように、
// template限定子の指定が必要になることに注意
std::span<int, 3> static_span = s.last<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.last(3);
for (int x : dynamic_span) {
std::cout << x << std::endl;
}
}
出力
3
4
5
3
4
5
バージョン
言語
- C++20
処理系
- Clang: 9.0 ✅
- GCC: ??
- Visual C++: ??
参照
- P1872R0
spanshould havesize_type, notindex_type - LWG Issue 3103. Errors in taking subview of
spanshould be ill-formed where possible - P3471R4 Standard library hardening
- LWG Issue 4293.
span::subspan/first/lastchooses wrong constructor whenTis const-qualifiedbool- C++26で、効果が波カッコ初期化
R{...}から丸カッコ構築R(...)へ変更された。要素型がbool(const boolなど)のとき、リスト初期化が意図しないコンストラクタ(initializer_listをとるもの)を選んでしまう問題を防ぐもの
- C++26で、効果が波カッコ初期化
- P3878R1 Standard library hardening should not use the 'observe' semantic