只读算法
1.find
2.accumulate
string sum = accumulate(v.begin(),v.end(),string(""));
只读算法最好使用v.cbegi,v.cend,不用改变容器的值。
3.equal
equal(roster1.cbegin(), roster1.cend(), roster2.cbegin())
基于假设:第二个序列至少和第一个序列范围一样长。 不一定非要begin到end,可以自己设置范围。
写算法
1. fill
fill(vec.begin(),vec.begin()+vec.size()/2,10);
这些算法的第二个元素都是不包括该元素 (结合.end()的说明即可知道,这样才是合理的)
fill_n(vec.begin(),vec.size(),0);
区别就是fill_n的第二个参数从迭代器变成了数字,代表将从第一个参数指向的元素起的几个元素改写为第三个参数。
2.copy
std::vector<int> a = { 2,3,4 };
std::vector<int> b = { 7,8,9 };
copy(a.begin(), a.end(), b.end()-1);
将前两个参数确定出的范围替换到第三个参数开始的位置。 注意是替换
3.replace
replace(vec.begin(),vec.end(),0,42);
查找前两个参数划出的范围中的第三个参数,替换为第四个参数。
排序算法
1.sort
sort(v.begin(),v.end())
比如string,会以字典顺序排序
定制操作
可以自己定义比较大小的函数操作,重载掉默认的。
bool isShorter(const string &s1, const string &s2)
{
return s1.size()<s2.size();
}
sort(words.begin(),words.end(),isShorter);
相当于用自定义函数isShorter代替了<,“真”的结果就是sort的准则。
stable_sort则是在比较结果相同时,维持原先顺序。