#include <iostream>//std::cout
#include<iomanip>//输入输出格式化
#include<functional>//函数对象
#include<algorithm>//算法
#include<cmath>//数学函数
#include<string>//String
#include<cstring>//memset
#include<vector>//vector
using namespace std;
bool myOperation(int a,int b) {
return a<b;
}
struct obj {
bool operator() (int a,int b) {
return a<b;
}
} myobject;
int main(int argc,char** argv) {
vector<int> myVector;
for(int i=1; i<10; i++) {
myVector.push_back(i);
}
vector<int>myCopy(5);
//output the elements in the vector
random_shuffle(myVector.begin(),myVector.end());
// for(vector<int>::iterator iter=myVector.begin(); iter!=myVector.end(); iter++) {
// cout<<*iter<<" ";
// }
//cout<<endl;
//using default comparison
// sort(myVector.begin(),myVector.end());
// stable_sort(myVector.begin(),myVector.end());
// partial_sort(myVector.begin(),myVector.begin()+5,myVector.end());
partial_sort_copy(myVector.begin(),myVector.end(),myCopy.begin(),myCopy.end());
for(vector<int>::iterator iter=myVector.begin(); iter!=myVector.end(); iter++) {
cout<<*iter<<" ";
}
cout<<endl;
for(vector<int>::iterator iter=myCopy.begin(); iter!=myCopy.end(); iter++) {
cout<<*iter<<" ";
}
cout<<endl;
//using function as comp
random_shuffle(myVector.begin(),myVector.end());
// for(vector<int>::iterator iter=myVector.begin(); iter!=myVector.end(); iter++) {
// cout<<*iter<<" ";
// }
//cout<<endl;
// sort(myVector.begin(),myVector.end(),myOperation);
// stable_sort(myVector.begin(),myVector.end(),myOperation);
// partial_sort(myVector.begin(),myVector.begin()+5,myVector.end(),myOperation);
partial_sort_copy(myVector.begin(),myVector.end(),myCopy.begin(),myCopy.end(),myOperation);
for(vector<int>::iterator iter=myVector.begin(); iter!=myVector.end(); iter++) {
cout<<*iter<<" ";
}
cout<<endl;
for(vector<int>::iterator iter=myCopy.begin(); iter!=myCopy.end(); iter++) {
cout<<*iter<<" ";
}
cout<<endl;
//using object as comp
random_shuffle(myVector.begin(),myVector.end());
// for(vector<int>::iterator iter=myVector.begin(); iter!=myVector.end(); iter++) {
// cout<<*iter<<" ";
// }
//cout<<endl;
// sort(myVector.begin(),myVector.end(),myobject);
// stable_sort(myVector.begin(),myVector.end(),myobject);
// partial_sort(myVector.begin(),myVector.begin()+5,myVector.end(),myobject);
partial_sort_copy(myVector.begin(),myVector.end(),myCopy.begin(),myCopy.end(),myobject);
for(vector<int>::iterator iter=myVector.begin(); iter!=myVector.end(); iter++) {
cout<<*iter<<" ";
}
cout<<endl;
for(vector<int>::iterator iter=myCopy.begin(); iter!=myCopy.end(); iter++) {
cout<<*iter<<" ";
}
cout<<endl;
//using function object as comp
random_shuffle(myVector.begin(),myVector.end());
// for(vector<int>::iterator iter=myVector.begin(); iter!=myVector.end(); iter++) {
// cout<<*iter<<" ";
// }
//cout<<endl;
// sort(myVector.begin(),myVector.end(),less<int>());
// stable_sort(myVector.begin(),myVector.end(),less<int>());
// partial_sort(myVector.begin(),myVector.begin()+5,myVector.end(),less<int>());
partial_sort_copy(myVector.begin(),myVector.end(),myCopy.begin(),myCopy.end(),less<int>());
for(vector<int>::iterator iter=myVector.begin(); iter!=myVector.end(); iter++) {
cout<<*iter<<" ";
}
cout<<endl;
for(vector<int>::iterator iter=myCopy.begin(); iter!=myCopy.end(); iter++) {
cout<<*iter<<" ";
}
cout<<endl;
return 0;
}
partial_sort
default (1)
template <class RandomAccessIterator>
void partial_sort (RandomAccessIterator first, RandomAccessIterator middle,
RandomAccessIterator last);
custom (2)
template <class RandomAccessIterator, class Compare>
void partial_sort (RandomAccessIterator first, RandomAccessIterator middle,
RandomAccessIterator last, Compare comp);
功能:对mid所指位置之前的元素进行排列
参数:
返回值:空
运行结果:
partial_sort_copy
default (1)
template <class InputIterator, class RandomAccessIterator>
RandomAccessIterator
partial_sort_copy (InputIterator first,InputIterator last,
RandomAccessIterator result_first,
RandomAccessIterator result_last);
custom (2)
template <class InputIterator, class RandomAccessIterator, class Compare>
RandomAccessIterator
partial_sort_copy (InputIterator first,InputIterator last,
RandomAccessIterator result_first,
RandomAccessIterator result_last, Compare comp);
功能:不改变原来的元素序列,[result_first,result_last)中的元素是[first,last)中局部有序的元素序列(所以一般result中的长度小于原序列)
参数:
返回值:返回复制数据的迭代器。
运行结果:
sort
功能:元素的排序
运行结果:
stable_sort
功能:元素的稳定排序
运行结果:(这里未出现重复元素,所以不能体现其稳定性)