博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STL学习笔记(七) 程序中使用STL
阅读量:4661 次
发布时间:2019-06-09

本文共 1883 字,大约阅读时间需要 6 分钟。

条款43:算法调用优先于手写循环

 

class Widget {public:    bool test();};vector
vec;

算法调用:

for_each(vec.begin(), vec.end(), mem_fun_ref(&Widget::test));

手写循环:

for(auto it = vec.begin(); it != vec.end(); ++it)  it->test();

算法调用优于手写循环:效率更高; 正确性更容易; 可维护性更高

 

条款44:容器的成员函数优于同名算法

优先使用容器的成员函数: 速度更快;与容器结合更紧密

set
::iterator it = s.find(2012); //T(n) = O(logn)set
::iterator it = find(s.begin(), s.end(), 2012); //T(n) = O(n)

使用关联容器时,优先考虑使用成员函数形式的 find、count,可以获得对数时间性能

list容器成员函数效率高于同名的STL算法函数(list容器的成员函数无需任何对象拷贝,仅仅维护指针)

注: list容器中 remove, remove_if, unique 不同于vector容器的先remove然后erase用法, list容器是实实在在删除元素,所以无需再erase
注: STL的sort算法不能用于list容器(因为sort需要随机访问迭代器), list::sort()是稳定算法

 

条款45:正确区分 count,find, binary_search, lower_bound, upper_bound, equal_range

 

在选择具体的查找策略时,首先需要考虑迭代器制定的区间是否有序,如果有序,可以使用 binary_search, lower_bound, upper_bound, equal_range

binary_search 返回值为 bool,仅仅表明查找值是否在有序序列中

equal_range 返回一对迭代器

第一个迭代器等于 lower_bound 返回的迭代器,指向第一个与查找值相等的元素
第二个迭代器等于 upper_bound 返回的迭代器,指向最后一个与查找值相等元素的下一个元素
1.如果返回的两个迭代器相等,则表明没有找到欲查找值(通过这个特性进行检查最终查找结果)
2.有序序列中存在多少个元素与查找值相等: distance(it.first, it.second); //计算返回的两个迭代器之间的距离

 

条款46:考虑使用函数对象而不是函数作为STL算法的参数

 

vector
vec;sort(vec.begin(), vec.end(), greater
()); //使用标准函数对象,不要自己写一个comp函数

当将一个函数进行参数传递时,其实传递的是该函数指针:

sort(vector
::iterator first, vector
::iterator last, bool (*comp)(double, double));

函数指针参数抑制了内敛机制,而标准STL函数对象使用了内敛机制,所以sort比qsort快

 

条款47:避免产生"write only"代码

 

写清晰的代码,避免编写非常复杂的复合语句,软件的维护比开发过程通常消耗更长的时间

 

条款48:总是#include正确的头文件

1.几乎所有的标准STL容器都声明在与之同名的头文件中
2.除了4个STL算法之外,其余所有算法声明在<algorithm>中,这4个算法是 accumulate, inner_product, adjacent_difference, partial_sum 这4个声明在<numeric>中
3.所有迭代器声明在<iterator>中
4.标准函数子(如 less<T>), 函数适配器(bind2nd) 声明在<functional>中

条款49:学会分析与STL相关的编译器诊断信息
条款50:熟悉与STL相关站点

 

转载于:https://www.cnblogs.com/wwwjieo0/p/3444351.html

你可能感兴趣的文章
[HNOI2012]矿场搭建(割点)
查看>>
Ant Trip(画几笔)
查看>>
[ZJOI2004]嗅探器
查看>>
3033太鼓达人
查看>>
2503相框
查看>>
二维树状数组(模板)
查看>>
二叉苹果树(由根分为左子树和右子树两部分情况)
查看>>
皇宫看守
查看>>
[HNOI2003]消防局的设立
查看>>
[CQOI2009]叶子的染色
查看>>
明安图(卡特兰)数(及其扩展 折线法)
查看>>
质数距离
查看>>
质数(哥德巴赫猜想)
查看>>
高斯消元
查看>>
线性基
查看>>
[JLOI2015]装备购买
查看>>
[SCOI2016]幸运数字
查看>>
古代猪文
查看>>
太蒟蒻了,怎么办?在线等,急;
查看>>
高速公路 (highway)
查看>>