std::ranges:: views:: adjacent, std::ranges:: adjacent_view, std::ranges:: views:: pairwise
|
ヘッダーで定義
<ranges>
|
||
|
template
<
ranges::
forward_range
V,
std::
size_t
N
>
requires
ranges::
view
<
V
>
&&
(
N
>
0
)
|
(1) | (C++23以降) |
|
namespace
views
{
template
<
std::
size_t
N
>
|
(2) | (C++23以降) |
|
namespace
views
{
inline
constexpr
auto
pairwise
=
adjacent
<
2
>
;
|
(3) | (C++23以降) |
|
呼び出しシグネチャ
|
||
|
template
<
ranges::
viewable_range
R
>
requires
/* 下記参照 */
|
(C++23以降) | |
adjacent_view
は、
view
を受け取り、
view
を生成する範囲アダプタであり、その
i
th
番目の要素(「ウィンドウ」)は、元のビューの要素
[
i
,
i + N - 1
]
への
N
個の参照を保持する
std::tuple
である。
S
とする。このとき、生成されるビューのサイズは以下の通り:
-
S
-
N
+
1
(
S >= Nの場合) - 0 (それ以外の場合。この場合、結果のビューは空となる)
-
(
(
void
)
e,
auto
(
views::
empty
<
tuple
<>>
)
)
ただし
N
が
0
に等しく、かつ
decltype
(
(
e
)
)
が
forward_rangeをモデルとする場合、 - adjacent_view < views:: all_t < decltype ( ( e ) ) > , N > ( e ) それ以外の場合。
adjacent_view
は常に
forward_range
をモデルし、また適応された
view
型が対応するコンセプトをモデルする場合、
bidirectional_range
、
random_access_range
または
sized_range
もモデルします。
目次 |
データメンバ
| メンバー | 説明 |
V
base_
|
基となる
view
( 説明専用メンバーオブジェクト* ) |
メンバー関数
adjacent_view
を構築する
(public member function) |
|
|
先頭を指すイテレータを返す
(public member function) |
|
|
終端を指すイテレータまたはセンチネルを返す
(public member function) |
|
要素数を返す(基となる範囲が
sized_range
を満たす場合のみ提供)
(public member function) |
|
|
(C++26)
|
結果の
approximately_sized_range
の近似サイズを返す
(public member function) |
std::ranges::view_interface から継承 |
|
派生ビューが空かどうかを返す(
sized_range
または
forward_range
を満たす場合のみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
|
(C++23)
|
範囲の先頭を指す定数イテレータを返す
(
std::ranges::view_interface<D>
のpublic member function)
|
|
(C++23)
|
範囲の定数イテレータのセンチネルを返す
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューが空でないかどうかを返す(
ranges::empty
が適用可能な場合のみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューの先頭要素を返す(
forward_range
を満たす場合に提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューの末尾要素を返す(
bidirectional_range
かつ
common_range
を満たす場合のみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューの
n
番目の要素を返す(
random_access_range
を満たす場合のみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
推論ガイド
(なし)
ネストされたクラス
|
イテレータ型
( 説明専用メンバクラステンプレート* ) |
|
adjacent_view
が
common_range
でない場合に使用されるセンチネル型
( 説明専用メンバクラステンプレート* ) |
ヘルパーテンプレート
|
template
<
class
V, size_t N
>
constexpr
bool
ranges::
enable_borrowed_range
<
adjacent_view
<
V, N
>>
=
|
(C++23以降) | |
この
ranges::enable_borrowed_range
の特殊化は、基となるビューが
borrowed_range
を満たす場合に
adjacent_view
が
borrowed_range
を満たすようにする。
注記
views
::
adjacent
N
が
0
の場合でも、前方範囲のみを受け入れます。
ranges::adjacent_view と ranges::slide_view には類似点があります:
-
両方ともサイズ
Nの「スライディングウィンドウ」を作成します。 -
両方とも同じサイズ
S - N + 1を持ちます。ここでSは適応されたviewのサイズであり、S >= N > 0を満たします。
以下の表は、これらのアダプタの違いを示しています:
| ビューアダプタ |
value_type
|
ウィンドウサイズ
N
|
|---|---|---|
| ranges :: adjacent_view | std::tuple | テンプレートパラメータ |
| ranges:: slide_view | ranges:: range | 実行時引数 |
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_ranges_zip
|
202110L
|
(C++23) |
ranges::
zip_view
,
ranges:: zip_transform_view ,
ranges::adjacent_view
,
ranges:: adjacent_transform_view |
例
#include <array> #include <format> #include <iostream> #include <ranges> #include <tuple> int main() { constexpr std::array v{1, 2, 3, 4, 5, 6}; std::cout << "v = [1 2 3 4 5 6]\n"; for (int i{}; std::tuple t : v | std::views::adjacent<3>) { auto [t0, t1, t2] = t; std::cout << std::format("e = {:<{}}[{} {} {}]\n", "", 2 * i++, t0, t1, t2); } }
出力:
v = [1 2 3 4 5 6] e = [1 2 3] e = [2 3 4] e = [3 4 5] e = [4 5 6]
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 4098 | C++23 | views :: adjacent < 0 > が入力専用範囲を受け入れていた | 拒否するように変更 |
参考文献
- C++23標準 (ISO/IEC 14882:2024):
-
- 26.7.25 隣接ビュー [range.adjacent]
関連項目
変換関数を適用した
view
の隣接要素に対する結果からなる
(クラステンプレート) (range adaptor object) |
|
|
(C++23)
|
他の
view
のM
th
から(M + N - 1)
th
要素を表す
view
をM
th
要素とする
(クラステンプレート) (range adaptor object) |
|
(C++23)
|
他の
view
の要素をNサイズの非重複連続チャンクとした
view
s
の範囲
(クラステンプレート) (range adaptor object) |
他の
view
の要素からなり、一度にN要素進む
(クラステンプレート) (range adaptor object) |