std::ranges:: views:: stride, std::ranges:: stride_view
|
ヘッダー
<ranges>
で定義
|
||
|
template
<
ranges::
input_range
V
>
requires
ranges::
view
<
V
>
|
(1) | (C++23以降) |
|
namespace
views
{
inline
constexpr
/* 未規定 */
stride
=
/* 未規定 */
;
|
(2) | (C++23以降) |
|
呼び出しシグネチャ
|
||
|
template
<
ranges::
viewable_range
R
>
constexpr ranges:: view auto stride ( R && r, ranges:: range_difference_t < R > n ) ; |
(C++23以降) | |
|
template
<
class
DifferenceType
>
constexpr /*range adaptor closure*/ stride ( DifferenceType && n ) ; |
(C++23以降) | |
|
ヘルパーテンプレート
|
||
stride_view
は、
view
と数値
n
を受け取り、元のビューの要素を一度に
n
要素進みながら構成されるビューを生成するレンジアダプタです。これは、生成されたビューの各
m
番目
の要素が、元のビューの
(n * i)
番目
の要素であることを意味します(ここで
i
は非負のインデックスです)。
元のビューの要素のうち、「インデックス」が
n
の倍数でないものは、生成されたビューには含まれません。
S
とする。このとき、生成されるビューのサイズは以下の通り:
- ( S / n ) + ( S % n ? 1 : 0 ) 、ただし S >= n の場合;
- 1 、ただし S > 0 の場合;
- 0 、この場合、結果のビューは空となる。
n
より大きくなければなりません
0
、そうでない場合の動作は未定義です。
stride_view
は常に
input_range
をモデル化し、また適応された
view
型
V
が対応するコンセプトをモデル化する場合、
forward_range
、
bidirectional_range
、
random_access_range
および/または
sized_range
をモデル化します。
stride_view
<
V
>
は、基盤となるビュー
V
が
common_range
をモデル化する場合に常にそれをモデル化します。
目次 |
データメンバ
| メンバー | 説明 |
V
base_
|
基となるビュー
( 説明専用メンバーオブジェクト* ) |
ranges::
range_difference_t
<
V
>
stride_
|
サイズオブジェクト(「ストライド」)
( 説明専用メンバーオブジェクト* ) |
メンバー関数
stride_view
を構築する
(public member function) |
|
|
(C++23)
|
格納されているstride値を返す
(public member function) |
|
基となる(適応された)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 から継承 |
|
派生viewが空かどうかを返す(
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)
|
|
派生viewが空でないかどうかを返す(
ranges::empty
が適用可能な場合にのみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生viewの最初の要素を返す(
forward_range
を満たす場合に提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生viewの最後の要素を返す(
bidirectional_range
かつ
common_range
を満たす場合にのみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生viewの
n
番目の要素を返す(
random_access_range
を満たす場合にのみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
推論ガイド
ネストされたクラス
|
(C++23)
|
イテレータ型
( 説明専用メンバクラステンプレート* ) |
ヘルパーテンプレート
|
template
<
class
V
>
constexpr
bool
ranges::
enable_borrowed_range
<
stride_view
<
V
>>
=
|
(C++23以降) | |
この
ranges::enable_borrowed_range
の特殊化は、基になるビューが
borrowed_range
を満たす場合に
stride_view
が
borrowed_range
を満たすようにする。
注記
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_ranges_stride
|
202207L
|
(C++23) |
std::ranges::stride_view
|
例
#include <algorithm> #include <iostream> #include <ranges> #include <string_view> using namespace std::literals; void print(std::ranges::viewable_range auto&& v, std::string_view separator = " ") { for (auto const& x : v) std::cout << x << separator; std::cout << '\n'; } int main() { print(std::views::iota(1, 13) | std::views::stride(3)); print(std::views::iota(1, 13) | std::views::stride(3) | std::views::reverse); print(std::views::iota(1, 13) | std::views::reverse | std::views::stride(3)); print("0x0!133713337*x//42/A$@"sv | std::views::stride(0B11) | std::views::transform([](char O) -> char { return 0100 | O; }), ""); }
出力:
1 4 7 10 10 7 4 1 12 9 6 3 password
参考文献
- C++23標準 (ISO/IEC 14882:2024):
-
- 26.7.31 ストライドビュー [range.stride]
関連項目
|
(C++23)
|
別の
view
の M
th
番目から (M + N - 1)
th
番目の要素を表す
view
を M
th
要素とする
view
(クラステンプレート) (range adaptor object) |
|
(C++23)
|
別の
view
の要素を
N
サイズの非重複連続チャンクに分割した
view
s
の範囲
(クラステンプレート) (range adaptor object) |
適応されたviewの隣接する要素への参照のタプルから構成される
view
(クラステンプレート) (range adaptor object) |
|
述語を満たす
range
の要素から構成される
view
(クラステンプレート) (range adaptor object) |