GeezerVison is showing cpprefjp.github.io — std::rotate - cpprefjp C++日本語リファレンス
最終更新日時:
2026年09月19日 21時31分51秒 (JST)
rotarymars
が更新
履歴
編集
function template
<algorithm>
std:: rotate
namespace std {
template < class ForwardIterator >
void
rotate ( ForwardIterator first ,
ForwardIterator middle ,
ForwardIterator last ); // (1) C++98
template < class ForwardIterator >
ForwardIterator
rotate ( ForwardIterator first ,
ForwardIterator middle ,
ForwardIterator last ); // (1) C++11
template < class ForwardIterator >
constexpr ForwardIterator
rotate ( ForwardIterator first ,
ForwardIterator middle ,
ForwardIterator last ); // (1) C++20
template < class ExecutionPolicy , class ForwardIterator >
ForwardIterator
rotate ( ExecutionPolicy && exec ,
ForwardIterator first ,
ForwardIterator middle ,
ForwardIterator last ); // (2) C++17
}
概要
middleの要素が先頭、middle-1の要素が末尾となるように、イテレータ範囲[first,last)の要素の並びを回転させる。
要件
ForwardIterator は ValueSwappable の要件を満たしていること
*first の型は MoveConstructible と MoveAssignable の要件を満たしていること
事前条件
[first,middle) と [middle,last) は有効な範囲であること
効果
0 以上 last - first 未満の整数 i について、first + i の要素を first + (i + (last - middle)) % (last - first) の位置へ移動させる。
戻り値
C++98 まで
無し
C++11 から
回転前の先頭の要素を指すイテレータfirst + (last - middle)
備考
これは左への回転である
計算量
最大で last - first 回 swap する。
例
基本的な使い方
出力
tatero
swapをフックして可視化した例
出力例
swapping 0x1806040(0) <-> 0x1806042(2)
210345
swapping 0x1806041(1) <-> 0x1806043(3)
230145
swapping 0x1806042(0) <-> 0x1806044(4)
234105
swapping 0x1806043(1) <-> 0x1806045(5)
234501
実装例
処理系
Clang : 9.0.1 ✅
GCC : 4.7.0 ✅
Visual C++ : 2005 ✅ , 2008 ✅ , 2010 ✅ , 2012 ✅ , 2013 ✅ , 2015 ✅
C++11への対応(戻り値の変更)は2010から。
関連項目
参照