迭代器和算法

来源:互联网 发布:npm run windows 编辑:程序博客网 时间:2024/05/22 14:29

1、关乎效率时在map-operator[]和map-insert中慎重选择

map-operator[],检查k是否在map中,如果不在,则添加上,如果在,则更新‘

它会返回一个k值关联对象的引用。然后用v赋值给引用对象。当k不在上,会先构造一个空的对象,然后调用赋值操作。


2、通过mismatch和lexicographical比较实现简单的忽略大小写字符串的比较


3、了解你的排序选择

算法效率从高到低

partition:vector::iterator = partition(vector.begin(), vector.end(), boolfunction); begin到返回的iterator区间容纳了boofunction返回为true的所有值。

partial_sort:排出前n个最好的值。不需要排列全部。partial_sort(vector.begin(), vector.begin + 20,vector.end,compare);保证了前n个元素的顺序

stable_partition。partition的稳定版本.

sort:完全排序

nth_element:排出前n个元素,n个元素只保证是全部里面的前n个,但是不保证顺序,partial_sort保证了前n个的顺序。

stable_sort:提供了稳定版本。到n个元素中有相同元素时,stable_sort保证了相同元素的顺序,而partial_sort则对于相同值的元素是不受我们控制的。


4、获取容器中最大值和最小值

min_element

max_element


5、统计区间

accumulate:默认统计区间的和。

accumulate(vector.begin(), vector.end(), 0); // 0.0则表示用浮点数

也可以自定义方法。

accumulate(vector.begin(), vector.end(), 0, accufunction);

for_each也可以实现类似功能


6、注意哪个算法需要有序空间

binary_search

lower_bound

upper_bound


7、把仿函数类设计为用于值传递

C和C++都不允许你把函数作为参数传递给其它函数。取而代之的是传递函数指针。

如for_each(first, last, function);

传递的是函数指针,期间会有一个值拷贝。如果函数体很大或则有多态,则拷贝就会有问题。

可以同构代理Impl的形式解决该问题。




0 0
原创粉丝点击