目錄
一、常用排序算法
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;
}