1.泛型算法:
经典算法的公共接口,可以用于不同类型的元素和多种容器类型,只会运行于迭代器上而不会执行容器特有的操作。
2.常见算法
find(b, e, v); //查找
find_if(b, e, pred);
accumulate(b, e, init_v);
equal(b1, e1, b2); //默认第二序列长度≥第一序列
———————————————————————————————————————
fill(b, e, v); //值重置
fill_n(b, n, v); //从b开始的n个元素赋予v值,确保容器含有n个元素
fill_n(b_i, n, v); //插入迭代器,插入值时调用push_back(),back_inserter(vec):获取vec的尾后插入迭代器
———————————————————————————————————————
copy(b, e, d); //将一序列元素拷贝到另一序列,确保空间足够
replace(b, e, old_v, new_v) //相关值的替换
replace_copy(b, e, d, old_v, new_v) //相关值的替换,但不改变原序列,将新序列存放到d处
———————————————————————————————————————
sort(b, e);
unique(b, e); //将消除重复元素,但多余的不会删除,毕竟算法无法增删容器的内容(返回指向消除重复元素后序列的尾值)
vec.erase(尾值迭代器,vec.end()) //删除多余元素用容器自己的方法
———————————————————————————————————————
sort(b, e, pred) //pred谓词,分为一元谓词和二元谓词,迭代器的元素可以作为参数传入
stable_sort(b, e, pred) //维持原有相等元素的相对顺序
for_each(b, e, pred|lambda) //对每个元素进行相应的操作
transform(b, e, d, pred) //将序列处理后转入新序列
3.算法格式
(b, e, args)
(b, e, d, args)
(b1, e1, b2, args)
(b1, e1, b2, e2, args)
4.特定容器算法
list,forward_list(双链表和单链表)
如通用版sort要求随机迭代器,所以链表有自己的sort、merge、remove、reverse、unique