std::rotate
来自cppreference.com
|
|
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
| Defined in header <algorithm>
|
||
| template< class ForwardIt > void rotate( ForwardIt first, ForwardIt n_first, ForwardIt last ); |
(至 C++11) (C++11 起) |
|
以这样的方式的范围内
[first, last)交换中的元素,该元素n_first成为新的范围的第一个元素和n_first - 1成为最后一个元素. Original:
Swaps the elements in the range
[first, last) in such a way, that the element n_first becomes the first element of the new range and n_first - 1 becomes the last element. The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
目录 |
[编辑] 参数
| first, last | - | 元素的范围旋转
Original: the range of elements to rotate The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
| n_first | - | 元素移动到新的范围的开始
Original: the element to move to the beginning of the new range The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
| Type requirements | ||
-ForwardIt must meet the requirements of ValueSwappable and ForwardIterator.
| ||
-The type of dereferenced ForwardIt must meet the requirements of MoveAssignable and MoveConstructible.
| ||
[编辑] 返回值
(无)(至 C++11)
Original:
(none) (至 C++11)
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
迭代器等于
first + (last - n_first)(C++11 起)Original:
The iterator equal to
first + (last - n_first) (C++11 起)The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[编辑] 复杂性
线性
first和last之间的距离Original:
linear in the distance between
first and lastThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[编辑] 可能的实现
template<class ForwardIt> void rotate(ForwardIt first, ForwardIt n_first, ForwardIt last) { ForwardIt next = n_first; while (first != next) { std::swap(*first++, *next++); if (next == last) { next = n_first; } else if (first == n_first) { n_first = next; } } } |
[编辑] 为例
的std ::旋转在许多算法是一种常见的构建块。这个例子演示了插入排序C + +
Original:
std::rotate is a common building block in many algorithms. This example demonstrates insertion sort in C++
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
#include <vector> #include <iostream> #include <algorithm> int main() { std::vector<int> v{2, 4, 2, 0, 5, 10, 7, 3, 7, 1}; std::cout << "before sort: "; for(int n: v) std::cout << n << ' '; std::cout << '\n'; // insertion sort for (auto i = v.begin(); i != v.end(); ++i) { std::rotate(std::upper_bound(v.begin(), i, *i), i, i+1); } std::cout << "after sort: "; for(int n: v) std::cout << n << ' '; std::cout << '\n'; // simple rotation to the left std::rotate(v.begin(), v.begin() + 1, v.end()); std::cout << "simple rotate left : "; for(int n: v) std::cout << n << ' '; std::cout << '\n'; // simple rotation to the right std::rotate(v.rbegin(), v.rbegin() + 1, v.rend()); std::cout << "simple rotate right : "; for(int n: v) std::cout << n << ' '; std::cout << '\n'; }
Output:
before sort: 2 4 2 0 5 10 7 3 7 1 after sort: 0 1 2 2 3 4 5 7 7 10 simple rotate left : 1 2 2 3 4 5 7 7 10 0 simple rotate right: 0 1 2 2 3 4 5 7 7 10
[编辑] 另请参阅
| 副本和旋转范围内的元素 Original: copies and rotate a range of elements The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (函数模板) | |