算法示例
accumulate
- Callable item:
- function
- function object
operator()()
- lambada
[](){}
for_each
-
range-based for statement
for(decl : coll) { statement; }
replace
头,尾,旧值, 新值
带着if名称表示要给一个条件,参数是 头,尾,条件,新值 predicate 表示判断式 返回bool类型
oldvalue 都以new value 放到新区间,不符合原值者也放入新区间,旧的值不会被覆盖
count, count_if
容器中有没有提供同名成员函数,容器提供的成员函数效率更高
可以认为是泛化的算法
容器提供的可以认为是特化的算法,效率更高
为什么只有这八个提供了特化的算法,因为底层实现是associate 关联式容器,底层是红黑树和散列表
插入,删除,查找,其中查找的性能很好。
至于关联式容器。内部有自己的组织形式,不必使用sort算法对他们进行排序
find, find_if
循序查找算法。O(n)
关联式容器提供的find效率为 O(log2N);
sort
random_access iterator
- 堆排序
- 快速排序
- 插入排序
rbegin(), rend()
8 个关联式容器不适用于sort算法 bidirectional iterator
list forward_list 自带成员函数 sort
reverse iterator, rbegin(), rend()
rbegin 指向的是 end的前一个元素
rend 指向的是begin前一个元素
- 如何实现?
// 使用适配器
reverse_iterator
rbegin()
{
return reverse_iterator(end());
}
reverse_iterator
rend()
{
return reverse_iterator(begin());
}
binary_search
前提:有序
前向迭代器 forwardIterator
Lower_bound : 可插入的最小秩
Upper_bound:可插入的最大秩
根据 lower_bound 去判断是否找到了元素
在前面可以先做一个检查,可以让效率提高。