/* STL常用排序算法(排序算法包含在<algorithm>头文件中)
*
* sort
* 对容器内的元素进行排序,
* 函数原型:`sort(iterator beg, iterator end, _Pred);`
* - iterator beg 和 iterator end指定排序范围;
* - _Pred 谓词,指定排序方式;
* 注:对自定义类型需要自定义排序方式谓词;
*
*
* random_shuffle
* 将指定范围内的元素随机调整次序;
* 函数原型:`random_shuffle(iterator begin, iterator end);`
* - iterator beg 和 iterator end指定排序范围;
*
*
* merge
* 将两个容器内的元素合并,并存储到另一个容器中;
* 函数原型:`merge(iterator1 beg, iterator1 end, iterator2 beg, iterator2 end, iterator dest);`;
* - iterator1 beg 和 iterator1 end指定第一个容器的元素范围;
* - iterator2 beg 和 iterator2 end指定第二个容器的元素范围;
* - iterator dest 用来储存合并元素的容器.
* 注:
* (1)在merge之前需要给目标容器先开辟空间来储存元素;
* (2)在合并时会比较两个容器的当前位置的大小,先插入小的;源容器可以使未经排序的.
*
*
* reverse
* 将容器内的元素进行反转;
* 函数原型:`reverse(iterator beg, iterator end);`;
* - iterator beg 和 iterator end指定操作元素范围;
*/
一个栗子:
#include <iostream>
#include <string>
#include <ctime>
#include <vector>
#include <algorithm>
#include <random>
using namespace std;
void CreateVec(vector<int> &v){
// srand((unsigned int)time(NULL)); 旧版生成随机数方法,弃用
std::random_device rd; // Will be used to obtain a seed for the random number engine
std::mt19937 gen(rd()); // Standard mersenne_twister_engine seeded with rd()
std::uniform_int_distribution<> dist(0, 1000);
for(int i=0; i<10; i++){
int a = dist(gen); // 使用新的产生随机数的方式
v.push_back(a);
}
}
class myPrint{
public:
void operator()(int val){
cout << val << " ";
}
};
int main(){
vector<int> v1;
vector<int> v2;
CreateVec(v1);
cout << "容器1:" << endl;
for_each(v1.begin(), v1.end(), myPrint());
cout << endl;
cout << "容器2:" << endl;
CreateVec(v2);
for_each(v2.begin(), v2.end(), myPrint());
cout << endl;
cout << "合并后的容器:" << endl;
vector<int> v3;
v3.resize(v1.size()+v2.size());
merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());
for_each(v3.begin(), v3.end(), myPrint());
cout << endl;
cout << "排序后的容器:" << endl;
sort(v3.begin(), v3.end());
for_each(v3.begin(), v3.end(), myPrint());
cout << endl;
cout << "反转后的容器:" << endl;
reverse(v3.begin(), v3.end());
for_each(v3.begin(), v3.end(), myPrint());
cout << endl;
}