Liangjf

The darkest hour is that before the dawn.

生活

稳健的漫步~~~

稳健的漫步~~~ 2019年的计划第一个暂未达成,其实Effective STL这本书18年12月开始看的了,只不过由于年末节日多,项目版本更新频繁,空闲时间少而一直缓慢的前进。 直至目标截止期的今天,也只不过是看完一遍,第二遍巩固并写博文到条目二十四,距离目标还有26条。 但尽力了,有时是事不在人为的。不过为了不耽搁后面的计划,还是会继续尽快的抽空把剩余的完成,有始有终。 STL,...

《Effective STL》

40《若一个类是函数子,使它可适配》

条目四十《若一个类是函数子,使它可适配》 在stl中,下面的函数适配器可以使函数指针转换为特定的类型,供下面的使用。 4个标准的函数配接器(not1、not2、bind1st和bind2nd)都要求一些特殊的类型定义,那些非标准的、与STL兼容的配接器通常也是如此。 但是如果是函数对象,那么需要继承基类函数适配器,实现特定的接口,使函数子拥有可适配的特性,这样才能更加健壮,适用范...

《Effective STL》

39《确保判别式是“纯函数”》

条目三十九《确保判别式是“纯函数”》 一个判别式(predicate)是一个返回值为bool类型(或者可以隐式地转换为bool类型)的函数。 一个纯函数(pure function)是指返回值仅仅依赖于其参数的函数。纯函数所能访问的数据应该仅局限于参数以及常量(在函数生命期内不会被改变 判别式类(predicate class)是一个函数子类,它的operator...

设计模式

设计模式——个人浅谈

设计模式——个人浅谈 1.什么是设计模式 开篇先借用名人Christopher Alexander说过的一句话“每一个模式描述了一个在我们周围不断重复出现发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”。 这是GOF里对设计模式的一个形容。显而易见,设计模式是一个根据不断出现的常见问题而归纳出的一个通用的解决方案,有了它,可避免做重复性的工作。...

《Effective STL》

31《了解各种与排序有关的选择》

条目三十一《了解各种与排序有关的选择》 1.sort template<class _RanIt,class _Pr> inline void sort(const _RanIt _First, const _RanIt _Last, _Pr _Pred) 全排序,整个容器排序。 2.partial_sort templa...

《Effective STL》

30《确保目标区间足够大》

条目三十《确保目标区间足够大》 在使用STL中的算法时,确保目标区间足够大,这个大应该怎么理解? 在我看来就是,容器,在初始化时使用reserve()强制设定容器的容量,和在目标容器比源容器size()元素个数更小时,在使用的时候,如果是直接对目标容器操作,会由于目标容器与源容器大小不匹配的问题,从而报错。 例如: int transmogrify(int x); vector s...

《Effective STL》

29《对于逐个字符的输入请考虑istreambuf_iterator》

条目二十九《对于逐个字符的输入请考虑istreambuf_iterator》 1.使用: ifstream inputfile("xxxx"); string fileDate((istream_iterator<char>(inputfile)), istream_iterator<char>()); 在流输入的时候遇到空格就跳过,也就是不会读入空格字符。 2...

《Effective STL》

28《正确理解由reverse_iterator的base()成员函数所产生的iterator的用法》

条目二十八《正确理解由reverse_iterator的base()成员函数所产生的iterator的用法》 迭代器的种类一共有四种,上面已经说过了。这里就不再次写出来。 这一个条目主要是reserce_iterator和iterator的转换。可以使用base()函数来把前者转换为后者。 比如在拥有reserve_iterator,但需要用到插入,删除成员函数,那么这两个是不接受re...

《Effective STL》

26《iterator优先于const_iterator、reverse_iterator以及const_reverse_iterator》

条目二十六《iterator优先于const_iterator、reverse_iterator以及const_reverse_iterator》 这几个东西不是类型来的,而是不同的类,所以强制转换的话是不行的,所以别把C风格的强制转换类型用在这里。 它们之间存在着隐式转换。 iterator -> const_iterator iterator -> reverse_it...

《Effective STL》

24《当效率至关重要时,请在map::operator[]与map::insert之间谨慎做出选择》

条目二十四《当效率至关重要时,请在map::operator[]与map::insert之间谨慎做出选择》 当效率至关重要时,应该在map::operator[]和map::insert之间仔细做出选择。如果要更新一个已有的映射表元素,则应该优先选择operator[];但如果要添加一个新的元素,那么最好还是选择insert。 下面来分析为什么是这样子的。 首先先说明,下面两个...