Namespaces
Variants

std::ranges:: views:: stride, std::ranges:: stride_view

From cppreference.net
Ranges library
Range adaptors
ヘッダー <ranges> で定義
template < ranges:: input_range V >

requires ranges:: view < V >
class stride_view

: public ranges:: view_interface < stride_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以降)
ヘルパーテンプレート
1) stride_view は、 view と数値 n を受け取り、元のビューの要素を一度に n 要素進みながら構成されるビューを生成するレンジアダプタです。これは、生成されたビューの各 m 番目 の要素が、元のビューの (n * i) 番目 の要素であることを意味します(ここで i は非負のインデックスです)。 元のビューの要素のうち、「インデックス」が n の倍数でないものは、生成されたビューには含まれません。
元のビューのサイズを S とする。このとき、生成されるビューのサイズは以下の通り:
  • ( S / n ) + ( S % n ? 1 : 0 ) 、ただし S >= n の場合;
  • 1 、ただし S > 0 の場合;
  • 0 、この場合、結果のビューは空となる。
2) 名前 views :: stride RangeAdaptorObject を表す。部分式 e および n が与えられたとき、式 views :: stride ( e, n ) 式等価 である stride_view ( e, n ) に。
nは 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)
結果の 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 >> =

ranges:: enable_borrowed_range < 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]

関連項目

別の view の M th 番目から (M + N - 1) th 番目の要素を表す view を M th 要素とする view
(クラステンプレート) (range adaptor object)
別の view の要素を N サイズの非重複連続チャンクに分割した view s の範囲
(クラステンプレート) (range adaptor object)
適応されたviewの隣接する要素への参照のタプルから構成される view
(クラステンプレート) (range adaptor object)
述語を満たす range の要素から構成される view
(クラステンプレート) (range adaptor object)