[1]大多数算法都定义在algorithm中,它们不依赖于容器的类型(迭代器作为参数);算法只运行在迭代器之上!!!
//count是一个计算某元素给定范围出现次数的操作
vector<int> vec{ 1, 2, 3, 3, 2, 2, 25, 6, 7, 8, 2 };
vector<double> vdc{12, 34, 56, 78};
cout << count(vdc.cbegin(), vdc.cend(), 12)<<endl;//不同类型,但是操作一样
cout<<count(vec.cbegin(), vec.cend(), 2)<<endl;
return 0;
[2]accumulate()算法
第三个参数必须可以与前面的相加.
vector<string> L = { "aa", "aaa", "aa", "cc" };
string sum = accumulate(L.cbegin(), L.cend(), string());//传递""是不可以的
vector<double> L = {1.1 ,2,3,4,5 };
double sum = accumulate(L.cbegin(), L.cend(), 0.0);//0会损失精度
[3]equal()算法,比较两个容器的元素是否一样.第二个容器必须要的元素要不少于第一个.
std::equal(roster1.cbegin(), roster1.cend(), roster2.cbegin());
=====================================================================================
[4]写入算法:fill/fill_n:fill是向容器中写入元素,第一个参数代表目标起始位置,后一个表示写入的个数,最后一个表示写入的值(fill_n多一个写入值的个数).但是要确保容器有足够空间来写入. 与assign的区别,assign只能对整个容器赋值.
如果要确保空间足够,可以用back_inserter:插入迭代器作为目标位置.但是这是添加元素,而不是简单改写元素的值.
vector<int> a{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
fill_n(a.begin(), a.size(), 0);