名前空間
変種
操作

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

From cppreference.com
< cpp‎ | ranges
 
 
Rangesライブラリ
Rangeアダプタ
 
 
ヘッダ <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 /* unspecified */ stride = /* unspecified */;

}
(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 番目の要素が、ある非負のインデックス i に対して元のビューの (n * i) 番目の要素であることを意味します。元のビューの「インデックス」が n の倍数ではない要素は、生成されるビューには含まれません。
元のビューのサイズを S とします。このとき、生成されるビューのサイズは以下のようになります。
  • (S / n) + (S % n ? 1 : 0)S >= n の場合。それ以外の場合、
  • 1S > 0 の場合。それ以外の場合、
  • 0 となり、結果のビューは空になります。
2) 名前 views::strideRangeAdaptorObject を表します。副式 en が与えられた場合、式 views::stride(e, n)stride_view(e, n)式的に同等です。
n0 より大きくなければなりません。そうでなければ、動作は未定義です。

stride_view は常に input_range をモデル化し、適応された viewV が対応する概念をモデル化する場合、forward_rangebidirectional_rangerandom_access_range、および/または sized_range をモデル化します。stride_view<V> は、基盤となるビュー Vcommon_range をモデル化する場合、常に common_range をモデル化します。

目次

[編集] データメンバー

メンバ 説明
V base_ (private) 基盤となるビュー
(説明用のメンバオブジェクト*)
ranges::range_difference_t<V> stride_ (private) サイズオブジェクト(「ストライド」)
(説明用のメンバオブジェクト*)

[編集] メンバー関数

stride_view を構築する
(public メンバ関数) [編集]
(C++23)
格納されているストライド値を返す
(public member function)
基になる(適応された)ビューのコピーを返す
(public member function) [編集]
先頭へのイテレータを返す
(public メンバ関数) [編集]
終端へのイテレータまたはセンチネルを返す
(public メンバ関数) [編集]
基底(アダプトされた)レンジが sized_range を満たす場合にのみ、要素数を返す
(public メンバ関数) [編集]
std::ranges::view_interface から継承
派生ビューが空かどうかを返す。sized_range または forward_range を満たす場合にのみ提供される
(std::ranges::view_interface<D> の public メンバ関数) [編集]
(C++23)
範囲の先頭への定数イテレータを返す
(std::ranges::view_interface<D> の public メンバ関数) [編集]
(C++23)
範囲の定数イテレータの番兵を返す
(std::ranges::view_interface<D> の public メンバ関数) [編集]
派生ビューが空でないかどうかを返す。ranges::empty が適用可能な場合にのみ提供される
(std::ranges::view_interface<D> の public メンバ関数) [編集]
派生ビューが forward_range を満たす場合に、派生ビューの最初の要素を返す
(std::ranges::view_interface<D> の public メンバ関数) [編集]
派生ビューが bidirectional_rangecommon_range の両方を満たす場合にのみ、派生ビューの最後の要素を返す
(std::ranges::view_interface<D> の public メンバ関数) [編集]
派生ビューが random_access_range を満たす場合にのみ、派生ビューの n番目の要素を返す
(std::ranges::view_interface<D> の public メンバ関数) [編集]

[編集] 推論ガイド

[編集] ネストされたクラス

(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 のこの特殊化により、基盤となるビューがそれを満たす場合、stride_viewborrowed_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]

[編集] 関連項目

M番目の要素が別のviewのM番目から(M + N - 1)番目の要素に対するviewであるview
(クラステンプレート) (rangeアダプタオブジェクト)[編集]
別のviewの要素をN個ずつの重複しない連続したチャンクにしたviewのrange
(クラステンプレート) (rangeアダプタオブジェクト)[編集]
適合するviewの隣接する要素への参照のタプルからなる view
(クラステンプレート) (rangeアダプタオブジェクト)[編集]
述語を満たすrangeの要素からなる view
(クラステンプレート) (rangeアダプタオブジェクト)[編集]
English 日本語 中文(简体) 中文(繁體)