STL_算法(25)_逆转和旋转
revers() 、
reverse_copy()、
rotate()、
rotate_copy()、
STL变序性算法
revers() 、
reverse_copy()、
rotate()、
rotate_copy()、
next_permutation()prev_permutation()
random_shuffle()
partition()
stable_partition()
#include<iostream>
#include<algorithm>
#include<vector>
#include<iterator>
using namespace std;
int main()
{
vector<int> ivec;
for(int i = 1; i <= 9; i++)
ivec.push_back(i);
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
cout<<*iter<<' ';
cout<<endl;
reverse(ivec.begin(), ivec.end());
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
cout<<*iter<<' ';
cout<<endl;
reverse_copy(ivec.begin(), ivec.end(), ostream_iterator<int>(cout, " "));
//
system("pause");
return 0;
}
#include<iostream>
#include<algorithm>
#include<vector>
#include<iterator>
using namespace std;
int main()
{
vector<int> ivec;
for(int i = 1; i <= 9; i++)
ivec.push_back(i);
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
cout<<*iter<<' ';
cout<<endl;
reverse(ivec.begin(), ivec.end());
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
cout<<*iter<<' ';
cout<<endl;
reverse_copy(ivec.begin() + 1, ivec.end() - 1, ostream_iterator<int>(cout, " "));
cout<<endl;
reverse(ivec.begin(), ivec.end());
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
cout<<*iter<<' ';
cout<<endl;
//旋转
rotate(ivec.begin(), ivec.begin() + 1, ivec.end());
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
cout<<*iter<<' ';
cout<<endl;
rotate(ivec.begin(), ivec.end() - 2, ivec.end());
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
cout<<*iter<<' ';
cout<<endl;
//
system("pause");
return 0;
}
#include<iostream>
#include<algorithm>
#include<vector>
#include<iterator>
using namespace std;
int main()
{
vector<int> ivec;
for(int i = 1; i <= 9; i++)
ivec.push_back(i);
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
cout<<*iter<<' ';
cout<<endl;
reverse(ivec.begin(), ivec.end());
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
cout<<*iter<<' ';
cout<<endl;
reverse_copy(ivec.begin() + 1, ivec.end() - 1, ostream_iterator<int>(cout, " "));
cout<<endl;
reverse(ivec.begin(), ivec.end());
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
cout<<*iter<<' ';
cout<<endl;
//旋转
//rotate(ivec.begin(), ivec.begin() + 1, ivec.end());
//rotate(ivec.begin(), ivec.end() - 2, ivec.end());
rotate(ivec.begin(), find(ivec.begin(), ivec.end(), 4), ivec.end());
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
cout<<*iter<<' ';
cout<<endl;
//
system("pause");
return 0;
}
#include<iostream>
#include<algorithm>
#include<set>
#include<iterator>
using namespace std;
int main()
{
set<int> iset;
for(int i = 1; i <= 9; i++)
iset.insert(i);
for(set<int>::iterator iter = iset.begin(); iter != iset.end(); iter ++)
cout<<*iter<<' ';
cout<<endl;
set<int>::iterator pos = iset.begin();
//pos = pos + 4;// set几何不能用此操作,只能用advance 因为set是一个双向的迭代器
advance(pos, 1);//双向迭代器用此操作
rotate_copy(iset.begin(), pos, iset.end(), ostream_iterator<int>(cout, " "));
cout<<endl;
pos = iset.end();
advance(pos, -2);//双向迭代器用此操作
rotate_copy(iset.begin(), pos, iset.end(), ostream_iterator<int>(cout, " "));
cout<<endl;
rotate_copy(iset.begin(), iset.find(4), iset.end(), ostream_iterator<int>(cout, " "));
cout<<endl;
//
system("pause");
return 0;
}