《Effective STL》读书笔记
文章平均质量分 59
阅读《Effective STL》的一些记录
klbc
这个作者很懒,什么都没留下…
展开
-
迭代器(第4章)(条款26,27,28,29)
特别说明:作者写本书的时候C++11标准还没有发布,不同编译器厂商对C++标准的实现有些差异,导致现在去看书的部分内容和最新的C++标准以及大部分编译器的行为有些差异,请特别注意。 条款26:iterator优先于const_iterator, reverse_iterator, const_reverse_iterator 书中提到的例子,我进行了测试,除了连续存储的序列容器insert/erase成员函数的参数不能为reverse_iterator外,其他均可以,以及iterator与cons...原创 2021-01-17 22:22:16 · 86 阅读 · 0 评论 -
关联容器(第3章)(条款24,25)
条款24:当效率至关重要时,请在 map::operator[] 与 map::insert 之间谨慎做出选择 看如下operator[]的官方文档说明: std::map::operator[] C++98 C++11 mapped_type& operator[] (const key_type& k); mapped_type& operator[] (key_type&& k); Access element Ifkmatches t...原创 2021-01-10 23:52:42 · 94 阅读 · 0 评论 -
关联容器(第3章)(条款23)
条款23:考虑用排序的vector替代关联容器 标准关联容器通常实现为平衡的二叉查找树,它适合如下应用场景:频繁的插入、删除,查找等操作,这些操作基本都在同步交叉进行(以下简称场景一)。 但是很多应用程序使用数据结果的方式并没有这么混乱,它们使用的过程明显的分为3个阶段(以下简称场景二): 1)设置阶段:创建一个新的数据结构,并插入大量数据,这个阶段几乎所有的操作都是插入和删除操作,几乎没有查找操作,有也很少; 2)查找阶段:查询该数据结构特定信息,这个阶段几乎所有的操作都是查询操作,几乎没有插入和原创 2021-01-10 22:41:30 · 82 阅读 · 0 评论 -
在程序中使用STL(第7章)(条款44,45)
条款44:容器的成员函数优先于同名的算法 这个条款应该是毫无疑问的,下面是书中给出的理由: 1)成员函数往往更快; 2)成员函数通常与容器集合的更加紧密,特别是关联容器,而这时算法所不能的,算法比较处理通用性的东西; void listTest() { // 成员函数 list<int> l1{1,9,7,6,4}; list<int> l2{2,8,3,5,}; l1.sort();原创 2021-01-09 21:35:37 · 93 阅读 · 0 评论 -
在程序中使用STL(第7章)(条款43)
条款43:算法调用优先于手写的循环 有三个理由 效率:算法通常比程序员自己写的循环效率更高; 正确性:自己写循环比使用算法更容易出错; 可维护性:使用算法的代码通常比手写循环的代码更加简洁明了; 书中的例子 void dequeTest() { deque<int> dq{2, 3, 4}; dq.push_back(5); dq.push_front(1); auto idq = dq.insert(dq.cb原创 2021-01-09 18:52:30 · 107 阅读 · 0 评论 -
关联容器(第3章)(条款21,22)
条款21:总是让比较函数在等值情况下返回false 很显然,相等的值不存在前后关系,10 < 10肯定是不对的,但是10 <= 10是对的,但是,切记不要讲less_equla用来当做关联容器的比较类型,我想现实中应该也没有人这么做。。。如果真有人这么干了,会发生什么呢 根据等价规则: !(10 <= 10) && !(10 <= 10),则是 !(true) && !(true), 那就是false,难道可以往set中插入两个10??? 毕竟等.原创 2021-01-08 22:17:27 · 91 阅读 · 0 评论 -
关联容器(第3章)(条款19,20)
条款19:理解相等和等价的区别 在关联容器set/multiset, map/multimap中,有一个模板参数用来确定容器元素的排序规则,使用的是标准款less,而在set, map等只能保留唯一的元素中,是以刚才的排序规则来定义等价的。 模板类map形式如下: std::map template < class Key, // map::key_type class T,原创 2021-01-08 21:02:41 · 75 阅读 · 0 评论