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
(一)
假设你对C++程序的某个class实现文件做了些轻微改变,修改的不是接口,而是实现,而且只改private成分。然后重新建置这个程序,并预计只花数秒就好,当按下“Build”或键入make,会大吃一惊,因为你意识到整个世界都被重新编译和链接了!问题是在C++并没有把“将接口从实现中分离”做得很好。
避免陷入这种窘境的一种有效的方法就是本条款要提出的内容:将文件间的编译依存关系降至最低....
分类:
编程语言 时间:
2014-06-26 14:02:11
阅读次数:
279
例子:使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
对任一容器C,代码if (c.size()
== 0)本质上与if (c.empty())是等价的。既然如此,为什么要偏向于某一种形式呢,尤其是考虑到empty()通常被实现为内联函数,并且它所做的仅仅是返回size()是否为0。
理由很简单:empty()对所有的标准容器都是常数时间操作,而对一些list实现,size()耗费线性时间。
原因:在所有的标准容器中,只有l...
分类:
其他好文 时间:
2014-06-26 08:10:47
阅读次数:
266
这是本小人书。原名是《using stl》STL概述STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得STL变得非常通用。例如,由于STL的sort()函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组。要点STL算法作为模板函数提供。为了和其...
分类:
其他好文 时间:
2014-06-25 12:46:08
阅读次数:
288
1 const 传达的意思应该是这个变量是常量不能更改2 const 在 * 左边表示数据是const,在右边表示指针是const // char greeting[] = "hello"; char* p = greeting; //const *: const data //...
分类:
编程语言 时间:
2014-06-25 11:12:18
阅读次数:
229
一提到适配器(adapter),我们就想到了早期用电话线上网所用的调制解调器,俗称“猫”,“猫”的作用是实现数模转化和模数转化,在客户端,它可以将电话的模拟信息转化为我们计算机能够接收的数字信息,所以猫相当于一个转换器。再举个更加好理解的例子来说明"适配器“的含义。相信在我们每个人的家里都有插排,假设就这么一种情况,现在我们家里的墙壁上只有一个三角的插口,而我们的电视却是两个口,怎么办?毫无疑问,我们可以接一个新的插排,该插排至少有两个孔,一个是用于连接墙壁上的三角的插口,一个则是提供给电视剧用的两口的插口...
分类:
其他好文 时间:
2014-06-25 10:55:59
阅读次数:
285
(一)先看下面这些代码:
class PrettyMenu {
public:
void changeBackground(istream& imgSrc);
private:
Mutex mutex; //由于这个class希望用于多线程环境,所以它有这个互斥器作为并发控制之用
Image* bgImage; //目前的背景图像
int imageChan...
分类:
编程语言 时间:
2014-06-25 08:35:48
阅读次数:
339