最終更新日時: 2026年03月21日 23時12分53秒 (JST)
Raclamusi が更新

履歴 編集

function
<valarray>

# std::valarray::cshift

    ValOrProxy<T> cshift(int n) const;

## 概要

要素の位置を循環シフトする。

「cshift」は「circular shift(循環シフト)」の略。

## 戻り値

- `n`が正の値である場合、`n`個分だけ要素を前(`0`番目に向かう方向)に移動する。
  - 移動したことによって範囲外となった要素は、配列の後ろに移動する。
- `n`が負の値である場合、`n`個分だけ要素を後ろ(`size()`に向かう方向)に移動する。
  - 移動したことによって範囲外となった要素は、配列の先頭に移動する。

## 備考

- 戻り値の型 `ValOrProxy` は、`valarray`、あるいは、その代理となる型である。
  `<valarray>` の概要も参照のこと。

## 例

    #include <iostream>
    #include <valarray>

    template <class T>
    void print(const char* name, const std::valarray<T>& va)
    {
      std::cout << name << " : {";
      bool first = true;

      for (const T& x : va) {
        if (first) {
          first = false;
        }
        else {
          std::cout << ',';
        }
        std::cout << x;
      }
      std::cout << "}" << std::endl;
    }

    int main()
    {
      const std::valarray<int> va = {1, 2, 3, 4, 5};

      const std::valarray<int> left_shift_result = va.cshift(3);
      ::print("left_shift_result", left_shift_result);

      const std::valarray<int> right_shift_result = va.cshift(-3);
      ::print("right_shift_result", right_shift_result);
    }

### 出力

    left_shift_result : {4,5,1,2,3}
    right_shift_result : {3,4,5,1,2}

## 参照

- LWG Issue 618. `valarray::cshift()` effects on empty array
  - 空の配列に対するこの関数の挙動が、C++11で明確になった