• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    class
    <valarray>

    std::gslice

    namespace std {
      class gslice;
    }
    

    概要

    gsliceは、std::slice をより一般化したスライス指示用のヘルパークラスである。

    このクラスは、std::valarray クラスの operator[] メンバ関数にスライスの指示を与えるために使用する。

    gslice」は、「generalized slice (汎用スライス)」の略。

    メンバ関数

    構築・破棄

    名前 説明 対応バージョン
    (constructor) コンストラクタ

    その他メンバ関数

    名前 説明 対応バージョン
    start スライスを生成する初期位置を取得する
    size 生成するスライスの要素数群の valarray オブジェクトを取得する
    stride スライスを生成する間隔数群の valarray を取得する

    #include <valarray>
    #include <iostream>
    #include <numeric>
    
    auto main()
      -> int
    {
      std::valarray<int> a( 40 );
      std::iota( std::begin(a), std::end(a), 16 );
    
      // スライスの開始位置 3(start)から
      // 10個(strides[0])おきに 3箇所(lengths[0])
      // について、さらにそこから、
      //  3個(strides[1])おきに 4箇所(lengths[1])
      // を抜き出す。
      constexpr auto             start   = 3;
      std::valarray<std::size_t> lengths = {  3, 4 };
      std::valarray<std::size_t> strides = { 10, 3 };
    
      std::gslice gs( start, lengths, strides );
    
      auto gsliced_array = a[ gs ];
    
      decltype( a ) b( gsliced_array );
    
      for ( auto v : b )
        std::cout << v << "\n";
      std::cout << std::flush;
    }
    

    出力

    19
    22
    25
    28
    29
    32
    35
    38
    39
    42
    45
    48
    

    • 19, 29, 39 は strides[0] 個おきに lengths[0] 個の位置。
      • 19 は元のsstart + strides[0] * 0 番目の要素。
        • 19, 22, 25, 28 は strides[1] 個おきに lengths[1] 個の要素。
      • 29 は元のsstart + strides[0] * 1 番目の要素。
        • 29, 32, 35, 38 は strides[1] 個おきに lengths[1] 個の要素。
      • 39 は元のsstart + strides[0] * 2 番目の要素。
        • 39, 42, 45, 48 は strides[1] 個おきに lengths[1] 個の要素。