目录
一、常用排序算法
1.sort
(1) 内置数据类型
(2)自定义数据类型
2. random_shuffle(iterator beg, iterator end)
3.merge
4.reverse
二、常用的拷贝和替换算法
1.copy(起始不如直接=赋值)
2.replace
3.replace_if
4.swap
一、常用排序算法
1.sort
函数原型
sort(iterator beg, iterator end, _Pred)
// beg 开始迭代器
// end 结束迭代器
// _Pred 谓词
(1) 内置数据类型
(2)自定义数据类型
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
using namespace std;class Person
{
public:string name;int age;Person(string name, int age){this->name = name;this->age = age;}
};
void my_print2(Person p)
{cout << p.name << " " << p.age << endl;
}class MyCompare
{
public:bool operator()(Person p1, Person p2){return p1.age > p2.age;}
};
void test2()
{ vector<Person> v;v.push_back(Person("张三", 10));v.push_back(Person("李四", 20));v.push_back(Person("王五", 30));cout << "排序前" << endl;for_each(v.begin(), v.end(), my_print2);sort(v.begin(), v.end(), MyCompare());cout << "排序后" << endl;for_each(v.begin(), v.end(), my_print2);
}int main()
{test2();return 0;
}
2. random_shuffle(iterator beg, iterator end)
// 指定范围内的元素随机调整次序
// beg 迭代器的开始
// end 最后的迭代器
但是每次打乱的顺序是固定的,下面需要用种子解决这个问题。
3.merge
函数原型
merge(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
// 容器元素合并, 并储存到另外一个容器中,合并前后的容器必须都是有序的
// beg1 容器1的开始迭代器
// end1 容器1的结束迭代器
// beg2 容器2的开始迭代器
// end2 容器2的结束迭代器
// dest 目标容器开始迭代器
4.reverse
函数原型
reverse(iterator beg, iterator end);
// 翻转指定的元素范围
// beg 开始迭代器
// end 结束迭代器
二、常用的拷贝和替换算法
1.copy(起始不如直接=赋值)
函数原型
copy(iterator beg, iterator end, iterator dest)
// beg 起始迭代器
// end 终止迭代器
// dest 目标起始迭代器
2.replace
函数原型
replace(iterator beg, iterator end, oldvalue, new_value)
// 将区间所有旧元素换成新元素
// beg 开始迭代器
// end 结束迭代器
// oldvalue 旧元素
// newvalue 新元素
3.replace_if
replace_if(iterator beg, iterator end, _Pred, new_value)
// 按照条件替换元素
// beg 开始迭代器
// end 结束迭代器
// _pred 谓词
// new_value 替换的新元素
4.swap
函数原型
swap(container c1, container c2)
// 互换两个容器的元素
// c1 容器
// c2容器
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
using namespace std;void my_print2(int p)
{cout << p << " ";
}class MyReplace
{
public:bool operator()(int p){return p > 10;}
};void test2()
{ vector<int> v;vector<int> v1;for(int i = 0; i < 10; i++){v.push_back(i);v1.push_back(i+10);}for_each(v.begin(), v.end(), my_print2);cout << endl;for_each(v1.begin(), v1.end(), my_print2);cout << endl;swap(v, v1);cout << "------------------" << endl;for_each(v.begin(), v.end(), my_print2);cout << endl;for_each(v1.begin(), v1.end(), my_print2);cout << endl;
}int main()
{test2();return 0;
}