std::shift_left, std::shift_right
提供: cppreference.com
ヘッダ <algorithm> で定義 | ||
template<class ForwardIt > constexpr ForwardIt shift_left( ForwardIt first, ForwardIt last, | (1) | (C++20以上) |
template<class ExecutionPolicy, class ForwardIt > ForwardIt shift_left( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, | (2) | (C++20以上) |
template<class ForwardIt > constexpr ForwardIt shift_right( ForwardIt first, ForwardIt last, | (3) | (C++20以上) |
template<class ExecutionPolicy, class ForwardIt > ForwardIt shift_right( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, | (4) | (C++20以上) |
範囲 [first, last)
内の要素を要素 n
個分シフトします。
1) 要素を範囲の先頭方向にシフトします。 n <=0|| n >= last - first の場合は効果がありません。 そうでなければ、 [0, last - first - n) 内のすべての整数
i
について、元々位置 first + n + i にあった要素を位置 first + i に移動します。 移動は i
が 0 から開始して増加する順序で行われます。3) 要素を範囲の終端方向にシフトします。 n <=0|| n >= last - first の場合は効果がありません。 そうでなければ、 [0, last - first - n) 内のすべての整数
i
について、元々位置 first + i にあった要素を位置 first + n + i に移動します。 ForwardIt
が LegacyBidirectionalIterator の要件を満たす場合、移動は i
が last - first - n -1 から開始して減少する順序で行われます。2,4) それぞれ (1) および (3) と同じですが、
policy
に従って実行され、移動は任意の順序で行われる可能性があります。 これらのオーバーロードは、 std::is_execution_policy_v<std::decay_t<ExecutionPolicy>> が true でなければ、オーバーロード解決に参加しません。元の範囲内にあったけれども新しい範囲には残らない要素は有効だけれども未規定な状態になります。
目次 |
[編集]引数
first | - | 元の範囲の先頭 |
last | - | 元の範囲の終端 |
n | - | シフトする位置の数 |
policy | - | 使用する実行ポリシー。 詳細は実行ポリシーを参照してください |
型の要件 | ||
-ForwardIt は LegacyForwardIterator の要件を満たさなければなりません。 | ||
-オーバーロード (3-4) の場合、 ForwardIt は LegacyBidirectionalIterator の要件または ValueSwappable の要件のいずれかを満たさなければなりません。 | ||
-ForwardIt を逆参照した型は MoveAssignable の要件を満たさなければなりません。 |
[編集] 戻り値
1-2) 結果の範囲の終端。
n
が正かつ last - first
より小さい場合は first + (last - first - n)
を返します。 そうでなく n
が正の場合は first
を返します。 そうでなければ last
を返します。3-4) 結果の範囲の先頭。
n
が正かつ last - first
より小さい場合は first + n
を返します。 そうでなく n
が正の場合は last
を返します。 そうでなければ first
を返します。[編集] 計算量
1-2) 多くとも std::distance(first, last)- n 回の代入。
3-4) 多くとも std::distance(first, last)- n 回の代入または swap。
[編集]例外
テンプレート引数 ExecutionPolicy
を持つオーバーロードは以下のようにエラーを報告します。
- アルゴリズムの一部として呼び出された関数の実行が例外を投げ、
ExecutionPolicy
が標準のポリシーのいずれかの場合は、 std::terminate が呼ばれます。 それ以外のあらゆるExecutionPolicy
については、動作は処理系定義です。 - アルゴリズムがメモリの確保に失敗した場合は、 std::bad_alloc が投げられます。
[編集] 関連項目
(C++11) | 指定範囲の要素を新しい位置にムーブします (関数テンプレート) |
(C++11) | 指定範囲の要素を後ろからムーブします (関数テンプレート) |
指定範囲の要素の順序を回転させます (関数テンプレート) |