GeezerVison is showing cpprefjp.github.io — std::ranges::rotate_copy - cpprefjp C++日本語リファレンス
最終更新日時:
2026年09月11日 13時06分31秒 (JST)
Akira Takahashi
が更新
履歴
編集
function template
<algorithm>
std::ranges:: rotate_copy (C++20)
namespace std :: ranges {
template < forward_iterator I ,
sentinel_for < I > S ,
weakly_incrementable O >
requires indirectly_copyable < I , O >
constexpr rotate_copy_result < I , O >
rotate_copy ( I first ,
I middle ,
S last ,
O result ); // (1) C++20
template < forward_range R ,
weakly_incrementable O >
requires indirectly_copyable < iterator_t < R > , O >
constexpr rotate_copy_result < borrowed_iterator_t < R > , O >
rotate_copy ( R && r ,
iterator_t < R > middle ,
O result ); // (2) C++20
template < execution-policy Ep ,
random_access_iterator I ,
sized_sentinel_for < I > S ,
random_access_iterator O ,
sized_sentinel_for < O > OutS >
requires indirectly_copyable < I , O >
rotate_copy_truncated_result < I , O >
rotate_copy ( Ep && exec ,
I first ,
I middle ,
S last ,
O result ,
OutS result_last ); // (3) C++26
template < execution-policy Ep ,
sized-random-access-range R ,
sized-random-access-range OutR >
requires indirectly_copyable < iterator_t < R > , iterator_t < OutR >>
rotate_copy_truncated_result < borrowed_iterator_t < R > , borrowed_iterator_t < OutR >>
rotate_copy ( Ep && exec ,
R && r ,
iterator_t < R > middle ,
OutR && result_r ); // (4) C++26
}
概要
middleの要素が先頭、middle-1の要素が末尾となるように、[first,last)の要素の並びを回転させ、その結果を出力の範囲へコピーする。
(1): イテレータ範囲を指定する
(2): Rangeを直接指定する
(3): (1)の並列アルゴリズム版。実行ポリシーを指定し、出力範囲の終端も指定する
(4): (2)の並列アルゴリズム版。実行ポリシーを指定する
事前条件
[first,last) と [result,result + (last - first)) の範囲は重なっていてはならない。
効果
(1) : 0 以上 last - first 未満の整数 i について、*(result + i) = *(first + (i + (middle - first)) % (last - first)) という操作によって [first,last) の範囲を [result,result + (last - first)) の範囲へコピーする。
(2) : 以下と等価:
(3) : (1)と同じ効果を、指定された実行ポリシーexecに従って実行する。
(4) : 以下と等価:
戻り値
(1), (2): { .in = last, .out = result + (last - first) }
(3), (4): 出力範囲が入力範囲より短い場合、出力範囲の末尾まで書き込み、in1とin2で入力範囲のどこまで処理されたかを示す。in1は[middle, last)の範囲内の停止点、in2は[first, middle)の範囲内の停止点を指す。出力範囲が十分な場合はin1 == lastかつin2 == middleとなる
計算量
正確に last - first 回代入する。
例
基本的な使い方
出力
tatero
並列アルゴリズムの例 (C++26)
出力
3 4 5 1 2
バージョン
言語
処理系
参照