C++的STL模板库中提供了3种容器类:vector,list,deque对于这三种容器,在觉得好用的同时,经常会让我们困惑应该选择哪一种来实现我们的逻辑。在少量数据操作的程序中随便哪一种用起来感觉差别并不是很大,但是当数据达到一定数量后,会明显感觉性能上有很大差异。本文就试图从介绍,以及性能比较两...
分类:
其他好文 时间:
2014-06-26 19:33:21
阅读次数:
240
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie1.PyDictObject对象 --> C++ STL中的map是基于RB-tree的,搜索时间复杂度是O(logN)PyDictObject採用了hash表,时间复杂度是O(1)typede...
分类:
编程语言 时间:
2014-06-26 16:35:13
阅读次数:
175
??
当大多数程序员需要对一组对象进行排序的时候,首先想到的一个算法是sort。sort是一个非常不错的算法,但它也并非在任何场合下都是完美无缺的。有时候我们并不需要一个完全的排序操作。比如说,如果我们有一个存放Widget的矢量,而我们希望将质量最好的20个Widget送给最重要的顾客,按照顾客的重要程度送上不同质量的Widget,那么只需要排序出前20个最好的Widget,其他的Widget...
分类:
其他好文 时间:
2014-06-26 14:10:39
阅读次数:
185
例子:使v1的内容和v2的后半部分相同的最简单操作是什么?看下面四个答案:
①v1.assign(v2.begin()+v2.size()/2,v2.end());
②v1.clear();
copy(v2.begin()+v2.size()/2,v2.end(),back_inserter(v1));
③v1.insert(v1.end(),v2.begin...
分类:
其他好文 时间:
2014-06-26 13:28:22
阅读次数:
222
这是本小人书。原名是《using stl》STL概述STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得STL变得非常通用。例如,由于STL的sort()函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组。要点STL算法作为模板函数提供。为了和其...
分类:
其他好文 时间:
2014-06-25 12:46:08
阅读次数:
288
一提到适配器(adapter),我们就想到了早期用电话线上网所用的调制解调器,俗称“猫”,“猫”的作用是实现数模转化和模数转化,在客户端,它可以将电话的模拟信息转化为我们计算机能够接收的数字信息,所以猫相当于一个转换器。再举个更加好理解的例子来说明"适配器“的含义。相信在我们每个人的家里都有插排,假设就这么一种情况,现在我们家里的墙壁上只有一个三角的插口,而我们的电视却是两个口,怎么办?毫无疑问,我们可以接一个新的插排,该插排至少有两个孔,一个是用于连接墙壁上的三角的插口,一个则是提供给电视剧用的两口的插口...
分类:
其他好文 时间:
2014-06-25 10:55:59
阅读次数:
285
关于STL容器,最了不起的一点是,它们会自动增长以便容纳下你放入其中的数据,只要没有超出它们的最大限制就可以。对于vector和string,增长过程是这样来实现的:每当需要更多空间时,就调用与realloc类似的操作。这一类似于realloc的操作分为4部分:
分配一块大小为当前容量的某个倍数的新内存。在大多数实现中,vector和string的容量每次以2的...
分类:
其他好文 时间:
2014-06-25 08:40:21
阅读次数:
287
vector底层采用的是一个数组来实现,list底层采用的是一个环形的双向链表实现,而deque则采用的是两者相结合,所谓结合,并不是两种数据结构的结合,而是某些性能上的结合。我们知道,vector支持随机访问,而list支持常量时间的删除,deque支持的是随机访问以及首尾元素的删除。...
分类:
其他好文 时间:
2014-06-25 08:17:41
阅读次数:
383
??
一般情况下,是用typename还是用class纯粹是一个风格问题。但是在一种情况下,它就不是一个风格问题了。为了避免潜在的语法解析二义性,你需要在从属于形式类型参数的类型名前面使用typename。这样的类型被称为从属类型,用一个例子可以说明这一点。假设你要写一个函数模板,给它一个STL容器,它将返回容器中的最后一个元素是否大于第一个元素。下面是一种实现方式:
template...
分类:
其他好文 时间:
2014-06-25 07:41:01
阅读次数:
200
??
通常情况下,旧的C API使用数组合char*指针来进行数据交换而不是vector或string对象。这样的API还将存在很长的一段时间,如果我们想有效地使用STL,我们就必须与它们和平共处。
幸运的是,这很容易做到。如果有一个vector v,而需要得到一个指向v中数据的指针,从而可把v中的数据作为数组来对待,那么只需要使用&v[0]就可以了。对于string
s,对应的形...