C++算法 rotate()函数用于在[first,last)参数内旋转元素的顺序。
template <class ForwardIterator> void rotate (ForwardIterator first, ForwardIterator middle, ForwardIterator last); //until C++ 11 template <class ForwardIterator> ForwardIterator rotate (ForwardIterator first, ForwardIterator middle, ForwardIterator last); //since C++ 11
first:一个正向迭代器,指向要旋转参数内第一个元素的位置。
middle:正向迭代器,它寻址到[first,last)参数内的元素,该元素被移至该参数内的第一位置。
last:前向迭代器,在元素反转参数内,将位置指向最后一个元素之后的位置。
没有
让我们看一下旋转给定字符串的简单示例:
#include <algorithm> #include <iostream> #include <string> using namespace std; int main() { string str = "Hello"; cout << "Before Rotate : "<< str << endl; rotate(str.begin(), str.begin() + 2, str.end()); cout <<"After Rotate : " << str << endl; return 0; }
输出:
Before Rotate : Hello After Rotate : lloHe
让我们看另一个简单的例子:
#include <iostream> #include <algorithm> #include <vector> #include <iomanip> using namespace std; void print(char a[], int N) { for(int i = 0; i < N; i++) { cout << (i + 1) << ". " << setw(2) << left << a[i] << " "; } cout << endl; } int main() { char s[] = {'A', 'B', 'C', 'D', 'E', 'G', 'H'}; int slen = sizeof(s)/sizeof(char); cout << "Original order : "; print(s, slen); cout << "Rotate with \'C\' as middle element" << endl; rotate(s, s + 2, s + slen); cout << "Rotated order : "; print(s, slen); cout << "Rotate with \'G\' as middle element" << endl; rotate(s, s + 3, s + slen); cout << "Rotated order : "; print(s, slen); cout << "Rotate with \'A\' as middle element" << endl; rotate(s, s + 3, s + slen); cout << "Original order : "; print(s, slen); return 0; }
输出:
Original order : 1. A 2. B 3. C 4. D 5. E 6. G 7. H Rotate with 'C' as middle element Rotated order : 1. C 2. D 3. E 4. G 5. H 6. A 7. B Rotate with 'G' as middle element Rotated order : 1. G 2. H 3. A 4. B 5. C 6. D 7. E Rotate with 'A' as middle element Original order : 1. B 2. C 3. D 4. E 5. G 6. H 7. A
让我们看另一个简单的例子:
#include<iostream> #include<algorithm> #include<vector> using namespace std; int main () { vector<int> vec1{1,2,3,4,5,6,7,8,9}; //Print old vector cout << "Old vector:"; for(int i=0; i < vec1.size(); i++) cout << " " << vec1[i]; cout << "\n"; //Rotate vector left 3 times. int rotL=3; //rotate function rotate(vec1.begin(), vec1.begin()+rotL, vec1.end()); //Print new vector cout << "New vector after left rotation :"; for (int i=0; i < vec1.size(); i++) cout<<" "<<vec1[i]; cout << "\n\n"; vector <int> vec2{1,2,3,4,5,6,7,8,9}; //Print old vector cout << "Old vector:"; for (int i=0; i < vec2.size(); i++) cout << " " << vec2[i]; cout << "\n"; //Rotate vector right 4 times. int rotR = 4; //std::rotate function rotate(vec2.begin(), vec2.begin()+vec2.size()-rotR, vec2.end()); //Print new vector cout << "New vector after right rotation :"; for (int i=0; i < vec2.size(); i++) cout << " " << vec2[i]; cout << "\n"; return 0; }
输出:
Old vector : 1 2 3 4 5 6 7 8 9 New vector after left rotation : 4 5 6 7 8 9 1 2 3 Old vector : 1 2 3 4 5 6 7 8 9 New vector after right rotation : 6 7 8 9 1 2 3 4 5
让我们看另一个简单的例子:
#include <vector> #include <deque> #include <algorithm> #include <iostream> int main( ) { using namespace std; vector <int> v1; deque <int> d1; vector <int>::iterator v1Iter1; deque<int>::iterator d1Iter1; int i; for ( i = -3 ; i <= 5 ; i++ ) { v1.push_back( i ); } int ii; for ( ii =0 ; ii <= 5 ; ii++ ) { d1.push_back( ii ); } cout << "Vector v1 is ( " ; for ( v1Iter1 = v1.begin( ) ; v1Iter1 != v1.end( ) ;v1Iter1 ++ ) cout << *v1Iter1 << " "; cout << ")." << endl; rotate ( v1.begin ( ) , v1.begin ( ) + 3 , v1.end ( ) ); cout << "After rotating, vector v1 is ( " ; for ( v1Iter1 = v1.begin( ) ; v1Iter1 != v1.end( ) ;v1Iter1 ++ ) cout << *v1Iter1 << " "; cout << ")." << endl; cout << "The original deque d1 is ( " ; for ( d1Iter1 = d1.begin( ) ; d1Iter1 != d1.end( ) ;d1Iter1 ++ ) cout << *d1Iter1 << " "; cout << ")." << endl; int iii = 1; while ( iii <= d1.end ( ) - d1.begin ( ) ) { rotate ( d1.begin ( ) , d1.begin ( ) + 1 , d1.end ( ) ); cout << "After the rotation of a single deque element to the back,\n d1 is ( " ; for ( d1Iter1 = d1.begin( ) ; d1Iter1 != d1.end( ) ;d1Iter1 ++ ) cout << *d1Iter1 << " "; cout << ")." << endl; iii++; } }
输出:
Vector v1 is ( -3 -2 -1 0 1 2 3 4 5 ). After rotating, vector v1 is ( 0 1 2 3 4 5 -3 -2 -1 ). The original deque d1 is ( 0 1 2 3 4 5 ). After the rotation of a single deque element to the back, d1 is ( 1 2 3 4 5 0 ). After the rotation of a single deque element to the back, d1 is ( 2 3 4 5 0 1 ). After the rotation of a single deque element to the back, d1 is ( 3 4 5 0 1 2 ). After the rotation of a single deque element to the back, d1 is ( 4 5 0 1 2 3 ). After the rotation of a single deque element to the back, d1 is ( 5 0 1 2 3 4 ). After the rotation of a single deque element to the back, d1 is ( 0 1 2 3 4 5 ).
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)