1.求和——accumulate
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 5 #include<numeric>//accumulate 6 using namespace std; 7 8 int main() 9 { 10 int all[100] = {2,2,3,4,5,6,7,8,9,10}; 11 int sum = accumulate(all, all + 3, 1);//all的前三个数相加,和的初始值是1 12 printf("%d", sum); 13 14 return 0; 15 }
2.二分查找—— binary_search
1 #include<algorithm> 2 #include<numeric> 3 4 using namespace std; 5 6 int main() 7 { 8 int all[100] = {0, 1, 2, 3, 4, 5, 89, 104, 300, 600, 9000}; 9 int a; 10 11 while(scanf_s("%d", &a, 1) != EOF) 12 { 13 if(binary_search(all, all + 10, a))//在all的前十个元素中搜索a 14 printf_s("Have "); 15 else 16 printf_s("Not have "); 17 } 18 19 return 0; 20 }
3.拷贝函数——copy与copy_backward
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 5 ///copy 6 #include<algorithm> 7 #include<numeric> 8 using namespace std; 9 10 class N 11 { 12 public: 13 int a; 14 int b; 15 int c; 16 }all1[100], all2[100]; 17 18 int main() 19 { 20 all1[0].a = 1; 21 all1[0].b = 2; 22 all1[0].c = 3; 23 24 all1[1].a = 4; 25 all1[1].b = 5; 26 all1[1].c = 6; 27 28 copy(all1, all1 + 2, all2);//copy_backward 29 30 for(int i = 0 ; i < 2 ; i ++) 31 { 32 printf_s("%d %d %d ", all2[i].a, all2[i].b, all2[i].c); 33 } 34 35 return 0; 36 }
4. 计数——count
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 5 //count 6 #include<algorithm> 7 #include<numeric> 8 9 using namespace std; 10 11 int main() 12 { 13 int all[11] = {0, 1, 0, 0, 1, 0, 1, 5, 1, 0, 0}; 14 15 int num = count(all, all + 8, 5);//数一下all的前八个数里面1的个数 16 printf_s("%d ", num); 17 18 return 0; 19 }
5. 条件计数——count_if
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 5 //count_if 6 #include<algorithm> 7 #include<numeric> 8 9 using namespace std; 10 11 int main() 12 { 13 int all[11] = {0, 1, 2, 3, 4, 5, 6, 4, 5, 6, 10}; 14 int sum = count_if(all, all + 11,bind2nd(equal_to<int>(), 5));//这种方法貌似是被遗弃鸟~~ 15 16 printf_s("%d", sum); 17 18 return 0; 19 }
6. 相等——equal
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 5 //equal 6 #include<algorithm> 7 #include<numeric> 8 9 using namespace std; 10 11 int main() 12 { 13 int all[11]={0,1,2,3,4,5,6,7,8,9,10}; 14 int all2[11]={0,1,2,3,4,5,6,7,8,9,11}; 15 if(equal(all, all + 10, all2))//比较all与all2的前10个元素是否相等,可以扩展到对象是否相等 16 printf_s("equal "); 17 else 18 printf_s("not equal "); 19 20 return 0; 21 }
7. 填充——fill,fill_n
#include<cstdio> #include<iostream> #include<cstring> //fill,fill_n #include<algorithm> #include<numeric> using namespace std; int main() { int all[11] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //fill(all, all + 11 , 100);//将all的前11个元素填充成100 fill_n(all, 5, 100);//前5个元素填充成100,其他不变 printf_s("%d ", all[4]); printf_s("%d ", all[5]); }
8. 查找——find,find_end,find_first_of,find_if
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 5 //find,find_end,find_first_of,find_if 6 #include<algorithm> 7 #include<numeric> 8 9 using namespace std; 10 11 int main() 12 { 13 int all[14]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 4, 5, 6}; 14 int *a = find(all, all + 11, 8);//在all的前11个元素中查找8,如果存在,则返回8所对应的指针 15 printf_s("%d ", *a); 16 17 int all2[4] = {4, 5, 6}; 18 a = find_end(all, all + 14, all2 + 0 , all2 + 3);//找到字串all2在all中最后出现的初始位置 19 printf_s("位置:%d ", a - all); 20 21 a = find_first_of(all, all + 14, all2 + 0 , all2 + 3);//找到字串all2在all中第一次出现的初始位置 22 printf_s("位置:%d ", a - all); 23 24 25 int *sum=find_if(all,all+10,bind2nd(greater_equal<int> (), 5));//这种方法被遗弃了 26 printf("%d",sum-all); 27 28 return 0; 29 }