Namespaces
Variants

std::valarray<T>::cshift

ja.cppreference.net から
 
 
 
 
valarray<T> cshift( int count ) const;

同じサイズの新しい valarray を返します。要素の位置が count 要素だけ循環的にシフトされます。

count が非負の値の場合、要素を左に count 位置だけ循環的にシフトし、count が負の値の場合、要素を右に -count 位置だけ循環的にシフトします。

パラメータ

count - 要素をシフトする位置の数

戻り値

循環的にシフトされた要素を持つ結果のvalarray。

注記

この関数は、std::valarrayとは異なる戻り値の型で実装されることがあります。この場合、置換型は以下の特性を持ちます:

  • すべてのconst std::valarrayのメンバ関数が提供されます。
  • std::valarray、std::slice_array、std::gslice_array、std::mask_arrayおよびstd::indirect_arrayは置換型から構築できます。
  • すべてのconst std::valarray<T>& (begin()およびend()を除く(C++11から))を取る関数に対して、置換型を取る同一の関数が追加されます。
  • 2つのconst std::valarray<T>&引数を取るすべての関数に対して、const std::valarray<T>&と置換型のすべての組み合わせを取る同一の関数が追加されます。
  • 戻り値の型は、最も深くネストされた引数型よりも2レベルを超えるテンプレートのネストを追加しません。

例

#include <print>
#include <valarray>

int main()
{
    const std::valarray<int> v{1, 2, 3, 4, 5, 6, 7, 8};
    std::println("{}", v);
    std::println("{} <- 3", v.cshift(3));
    std::println("{} <- 11", v.cshift(11));
    std::println("{} -> 2", v.cshift(-2));
    std::println("{} -> 10", v.cshift(-10));
}

出力:

[1, 2, 3, 4, 5, 6, 7, 8]
[4, 5, 6, 7, 8, 1, 2, 3] <- 3
[4, 5, 6, 7, 8, 1, 2, 3] <- 11
[7, 8, 1, 2, 3, 4, 5, 6] -> 2
[7, 8, 1, 2, 3, 4, 5, 6] -> 10

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 618 C++98 シフトされた要素の式に
ゼロ除算が含まれる場合 size() が ​ 0 ​
式を使用せずに新しい位置を
記述する

関連項目

valarrayの要素をゼロ埋めシフトする
(公開メンバ関数)