STL-rules
cshilin
这个作者很懒,什么都没留下…
展开
-
Effective STL开端
This is the first blog part about STL.原创 2016-07-07 23:33:45 · 2468 阅读 · 0 评论 -
part5:仿函数,仿函数类(一)
Rule38:把仿函数类设计为用于值传递Rule39:用纯函数做判断式 一个行为良好的operator()当然是const,但不只如此。它也得是一个纯函数。不要修改内部成员对象的值,否则会出现未定义的情况。要记住纯函数没有状态,良好的operator也没有。判断式和判断式对象的operator()都是没有状态的。原创 2016-07-17 20:33:52 · 5235 阅读 · 0 评论 -
Part4:算法(三)
rule37:用accumulate或for_each来做区间统计 count函数能够告诉你区间有多少个等于某个值的元素,而count_if告诉你有多少个元素满足一个判断式。区间的最大值和最小值可以通过min_element和max_element获得。 有时,你需要自己定义对区间的统计信息,比如求和一个区间的元素和,对一个容器中的字符串长度求和。accumulate函数存在于numeric中原创 2016-07-17 19:33:54 · 5080 阅读 · 0 评论 -
Part4:算法(二)
Rule33:提防在指针的容器上使用类似remove的算法我们可以分析出remove的算法流程,他像这样: 其中B和C对象是不合格的对象,需要从中删除,如果我们使用remove方法,得到的结果是这样: 因为他会将位置2,和3的指针值替换为4,5位置的值,形成一个有效区域(1-3)。这就是最后的有效区间。这个时候,对象B,C已经不能正常回收了。造成了资源泄漏。 然后经过erase方原创 2016-07-17 14:46:15 · 6144 阅读 · 0 评论 -
Part4:算法(一)
Rule30:如何使用插入迭代器 原标题是“确保目标区间足够大”,我觉得这一部分主要讲了插入元素到容器中遇到的问题。所有,更换一个更能理解的名称。 首先这个需求:int trans(int value){ return value*2;}int _tmain(int argc, _TCHAR* argv[]){ int a[5] = {1,2,3,4,5}; l原创 2016-07-17 09:16:28 · 2843 阅读 · 0 评论 -
Part3:关联容器(二)&Part4:迭代器
Rule4:当关乎效率时应该在map::operator[]和map-insert之间仔细选择map[key] = value;这是一种简要的写法,这个操作是,如果key值不存在,插入这样一个键值对,如果key值存在,则修改这个键的值。结论是: 当给map添加一个元素时,我们断定insert比operator[]好;而当更新已经在map里的元素值时operator[]更好。Rule25:熟悉非原创 2016-07-16 16:13:22 · 4131 阅读 · 0 评论 -
Part3:关联容器(一)
Rule20:为指针的关联容器指定比较类型 有如下情况,有一个string*指针的set,你把一些动物的名字插入set:set<string*> ssp;ssp.insert(new string("Anteater"));ssp.insert(new string("Wombat"));ssp.insert(new string("Lemur"));ssp.insert(new stri原创 2016-07-16 12:51:31 · 6101 阅读 · 0 评论 -
Part2:vector和string(一)
Rule13:尽量使用vector和string来代替动态分配的数组原创 2016-07-15 11:01:41 · 1493 阅读 · 0 评论 -
Effective STL(3)-删除特定元素
Rule9:在删除选项中仔细选择 本部分主要是讲不同的容器对删除特定元素的方法。 比如要删除容器Container< int > c中所有值为2016的对象,完成这项任务的方法因不同的容器类型而不同:没有一种方法是通用的。如果你有一个连续内存容器(vector,deque,string)最好的方法是erase-remove方法 c.erase(remove(c.begin(),c.end()原创 2016-07-14 14:59:58 · 1261 阅读 · 0 评论 -
Effective STL(4)-线程安全
Rule12:对STL容器线程安全性的期待 STL标准中没有提到任何关于线程的东西,你对STL的线程安全有的第一个想法应该是它因实现而不同。 STL厂商只能为你做一些可以减少你多线程的痛苦的事情,你需要知道他们做了什么: 多个读取者是安全的。多线程可能同时读取一个容器的内容,这将是正确执行的。当然,在读取时不能有任何写入者操作这个容器。对不同容器的多个写入者是安全的。多线程可以同时写不同的容原创 2016-07-15 10:14:03 · 2230 阅读 · 0 评论 -
Effective STL(2)
Rule7:当使用new得指针的容器时,记得销毁容器前delete那些指针C++ 中STL的容器的析构函数不用自己调用,系统会进行析构,但是vector内元素的清空需要手动进行。 1. 非指针的数据类型,比如int,string,char,还包括自定义的数据结构、自定义的类等等,只需要手动调用vector的clear函数就行,空间的释放和系统系统就会自动进行。 2. 指针类型的数据,这种情况原创 2016-07-12 16:29:36 · 1367 阅读 · 0 评论 -
Part6:使用STL编程总结
Rule45:注意count,find,binary_search,lower_bound,upper_bound,equal_range的区别count,find用于一个无序的容器集合内。 count返回是否存在这个值,如果有,那么有多少个? find则用于考虑“是否存在这个值,如果有,那么第一个在哪儿?”找到后立即会返回。 所有,两个的方法的用处不一样,find的效率会高于count,因原创 2016-07-18 13:18:32 · 2273 阅读 · 0 评论