#include
1 adjacent_find
查找重复的元素
2 find_if
查找符合条件的第一个元素
3 find_if_not
查找不符合条件的第一个元素
4 for_each
可以遍历每一个元素
5 partial_sort
部分排序
6 partition
服务于快速排序法的分区
7 prev_permutation
排序
8 random_shuffle
随机排序
9 rotate
旋转
adjacent_find
查找重复的元素
1 #include <iostream> 2 #include <algorithm> 3 #include <set> 4 5 void main() 6 { 7 std::multiset<int>myset; 8 9 myset.insert(3); 10 myset.insert(1); 11 myset.insert(2); 12 myset.insert(1); 13 myset.insert(2); 14 15 auto it = adjacent_find(myset.begin(), myset.end()); 16 17 std::cout << *it << std::endl; 18 19 it = adjacent_find(it++, myset.end()); 20 21 std::cout << *it << std::endl; 22 23 it = adjacent_find(it++, myset.end()); 24 25 std::cout << *it << std::endl; 26 }
find
1 #include <iostream>
2 #include <algorithm>
3 #include <vector>
4
5 void main()
6 {
7 std::vector<int>myv;
8
9 myv.push_back(1);
10 myv.push_back(2);
11 myv.push_back(3);
12
13 auto i = find_if(myv.begin(), myv.end(), [](int v)->bool {return v < 4; });//返回第一个小于4的元素
14
15 if (i == myv.end())
16 {
17 std::cout << "not found" << std::endl;
18 }
19 else
20 {
21 std::cout << *i << std::endl;
22 }
23 }
find_if
查找符合条件的第一个元素
1 #include <iostream>
2 #include <algorithm>
3 #include <vector>
4
5 void main()
6 {
7 std::vector<int>myv;
8
9 myv.push_back(1);
10 myv.push_back(2);
11 myv.push_back(3);
12
13 auto i = find_if(myv.begin(), myv.end(), [](int v)->bool {return v < 4; });//返回第一个小于4的元素
14
15 if (i == myv.end())
16 {
17 std::cout << "not found" << std::endl;
18 }
19 else
20 {
21 std::cout << *i << std::endl;
22 }
23 }
find_if_not
查找不符合条件的第一个元素
1 #include <iostream>
2 #include <algorithm>
3 #include <vector>
4
5 void main()
6 {
7 std::vector<int>myv;
8
9 myv.push_back(1);
10 myv.push_back(2);
11 myv.push_back(3);
12
13 auto i = find_if_not(myv.begin(), myv.end(), [](int v)->bool {return v < 4; });//返回第一个不是小于4的元素
14
15 if (i == myv.end())
16 {
17 std::cout << "not found" << std::endl;
18 }
19 else
20 {
21 std::cout << *i << std::endl;
22 }
23 }
//[地址](参数) {语句; }
//&res直接操作一个变量,res等价于返回值,x代表参数,每次充当迭代器指向的元素
//不仅仅适用于array,也适用于vector
vector使用for_each
1 #include <iostream> 2 #include <algorithm> 3 #include <vector> 4 using namespace std; 5 6 void main() 7 { 8 std::vector<int>myvector;//创建一个数组,数组元素是int类型 9 10 myvector.push_back(11);//尾部插入 11 myvector.push_back(12); 12 myvector.push_back(13); 13 14 int res = 0;//保存结果 15 16 //[地址](参数) {语句; } 17 //&res直接操作一个变量,res等价于返回值,x代表参数,每次充当迭代器指向的元素 18 //不仅仅适用于array,也适用于vector 19 for_each(myvector.begin(), myvector.end(), [&res](int x) {res += x; }); 20 21 std::cout << res;//打印 22 23 system("pause"); 24 }
普通数组使用for_each
1 #include <iostream> 2 #include <algorithm> 3 4 struct print 5 { 6 void operator ()(int x)//重载() 7 { 8 std::cout << x << std::endl; 9 } 10 }; 11 12 void printA(int x) 13 { 14 std::cout << x << std::endl; 15 } 16 17 int main() 18 { 19 int a[10] = { 1,2,3,4,5,6,7,8,9,10 }; 20 int *p = std::find(a, a + 10, 11); 21 22 std::cout << a << " " << a + 10 << std::endl; 23 std::cout << *p << std::endl; 24 25 if (p == a + 10) 26 { 27 printf("没有找到 "); 28 } 29 30 std::for_each(a, a + 10, print());//第三个参数是函数指针,必须是函数类型 31 std::for_each(a, a + 10, printA); 32 33 return 0; 34 }
5 partial_sort
部分排序
1 #include <iostream> 2 #include <algorithm> 3 #include <string> 4 #include <vector> 5 6 struct student 7 { 8 public: 9 std::string name; 10 int score; 11 public: 12 student(std::string str, int num) :name(str), score(num) 13 { 14 15 } 16 bool operator<(const student &s1)const 17 { 18 return this->score < s1.score; 19 } 20 }; 21 22 void main() 23 { 24 std::vector<student>ss; 25 26 { 27 student s1("AA", 100); 28 ss.push_back(s1); 29 } 30 31 { 32 student s1("BB", 99); 33 ss.push_back(s1); 34 } 35 36 { 37 student s1("CC", 98); 38 ss.push_back(s1); 39 } 40 41 { 42 student s1("DD", 97); 43 ss.push_back(s1); 44 } 45 46 partial_sort(ss.begin(), ss.begin() + 2, ss.end()); 47 48 for (int i = 0; i < 2; i++) 49 { 50 std::cout << ss[i].name << " " << ss[i].score << std::endl; 51 } 52 }
partition
服务于快速排序法的分区
1 #include <iostream> 2 #include <algorithm> 3 #include <vector> 4 5 template <class T> 6 struct show 7 { 8 public: 9 void operator()(T &t) 10 { 11 std::cout << t << " "; 12 } 13 }; 14 15 bool isok(int num) 16 { 17 return num == 5; 18 } 19 20 void main() 21 { 22 std::vector<int>myv; 23 24 for (int i = 0; i < 10; i++) 25 { 26 myv.push_back(i); 27 } 28 29 for_each(myv.begin(), myv.end(), show<int>()); 30 std::cout << std::endl; 31 32 partition(myv.begin(), myv.end(), isok); 33 34 for_each(myv.begin(), myv.end(), show<int>()); 35 std::cout << std::endl; 36 }
prev_permutation
排序
1 #include <iostream> 2 #include <algorithm> 3 4 void main() 5 { 6 int a[4] = { 2,4,3,1 }; 7 8 do 9 { 10 std::cout << a[0] << " " << a[1] << " " << a[2] << " " << a[3] << std::endl; 11 } while (std::prev_permutation(a, a + 4)); 12 }
random_shuffle
随机排序
1 #include <iostream> 2 #include <algorithm> 3 #include <vector> 4 5 template <class T> 6 struct show 7 { 8 public: 9 void operator()(T &t) 10 { 11 std::cout << t << " "; 12 } 13 }; 14 15 void main() 16 { 17 std::vector<int>myv; 18 19 for (int i = 0; i < 10; i++) 20 { 21 myv.push_back(i); 22 } 23 24 for_each(myv.begin(), myv.end(), show<int>()); 25 std::cout << std::endl; 26 27 random_shuffle(myv.begin(), myv.end());//随机排序 28 29 for_each(myv.begin(), myv.end(), show<int>()); 30 std::cout << std::endl; 31 32 random_shuffle(myv.begin(), myv.end());//随机排序 33 34 for_each(myv.begin(), myv.end(), show<int>()); 35 std::cout << std::endl; 36 }
rotate
旋转
1 #include <iostream> 2 #include <algorithm> 3 #include <vector> 4 5 template <class T> 6 struct show 7 { 8 public: 9 void operator()(T &t) 10 { 11 std::cout << t << " "; 12 } 13 }; 14 15 bool isok(int num) 16 { 17 return num == 5; 18 } 19 20 void main() 21 { 22 std::vector<int>myv; 23 24 for (int i = 0; i < 10; i++) 25 { 26 myv.push_back(i); 27 } 28 29 for_each(myv.begin(), myv.end(), show<int>()); 30 std::cout << std::endl; 31 32 rotate(myv.begin(), myv.begin() + 1, myv.end()); 33 34 for_each(myv.begin(), myv.end(), show<int>()); 35 std::cout << std::endl; 36 37 rotate(myv.begin(), myv.begin() + 2, myv.end()); 38 39 for_each(myv.begin(), myv.end(), show<int>()); 40 std::cout << std::endl; 41 }