std::rotate
De 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. |
<metanoindex/>
<tbody> </tbody>| Dclar dans l'en-tte <algorithm>
|
||
template< class ForwardIt > void rotate( ForwardIt first, ForwardIt n_first, ForwardIt last ); template< class ForwardIt > ForwardIt rotate( ForwardIt first, ForwardIt n_first, ForwardIt last ); |
(avant C++11) (depuis C++11) |
|
Echange les lments dans la gamme
[first, last) de telle manire, que l'lment de n_first devient le premier lment de la nouvelle gamme n_first - 1 et devient le dernier lment . 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.
Paramtres
| first, last | - | l'ensemble d'lments en rotation
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 | - | l'lment dplacer vers le dbut de la nouvelle plage
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.
| ||
Retourne la valeur
(Aucun) (avant C++11)
Original:
(none) (avant 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.
L'itrateur gale
first + (last - n_first) (depuis C++11)Original:
The iterator equal to
first + (last - n_first) (depuis 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.
Complexit
linaire de la distance entre
first et lastOriginal:
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.
Mise en uvre possible
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;
}
}
}
|
Exemple
std :: rotate est un lment commun de nombreux algorithmes. Cet exemple illustre le tri par insertion en 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';
}
Rsultat :
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
Voir aussi
les copies et les faire pivoter une gamme d'lments 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. (fonction gnrique) | |