技术文章
Black_Man
这个作者很懒,什么都没留下…
展开
-
【转】C++程序设计之四书五经
C++程序设计之四书五经(上篇)《程序员》2004/02 C++是一门广泛用于工业软件研发的大型语言。它自身的复杂性和解决现实问题的能力,使其极具学术研究价值和工业价值。和C语言一样,C++已经在许多重要的领域大获成功。 然而,一个不可否认的现实是,在低阶程序设计领域,C++挤压着C同时也在承受着C的强烈反弹,而在高阶程序设计领域,Java和C#正在不断蚕食着C++的地盘。也许原创 2006-05-17 15:16:00 · 917 阅读 · 0 评论 -
条款5:尽量使用区间成员函数代替它们的单元素兄弟
条款5:尽量使用区间成员函数代替它们的单元素兄弟快!给定两个vector,v1和v2,使v1的内容和v2的后半部分一样的最简单方式是什么?不要为“当v2有偶数个元素时才有一半”而烦恼,只要做一些合理的东西。时间到!如果你的答案是v1.assign(v2.begin() + v2.size() /2, v2.end()); 或者其他很相似的东西,你就答对了,可以获得金质奖章。如果你的转载 2006-07-08 18:57:00 · 1102 阅读 · 0 评论 -
条款6: 当心C++另人迷惑的解析
条款6: 当心C++另人迷惑的解析 假如你有一个整数构成的文件,需要把它复制到一个list中.以下代码看起来是一个很有意义的方法: ifstream dataFile("ints.dat");list data(istream_iterator(dataFile), // warning! this doesnt do istream_i转载 2006-07-08 18:59:00 · 960 阅读 · 0 评论 -
条款7.使用包含由new产生的指针容器时,切记在容器销毁前delete指针
条款7.使用包含由new产生的指针容器时,切记在容器销毁前delete指针容器在STL中被认为是智能的。它们支持向前和向后的迭代器;它们能告诉你它所保存的对象类型(通过typedef value_type);在插入和删除过程中它们进行了良好的内存管理;它们将报告自己包含了多少对象和自己最多能包含多少对象(分别通过size和max_size取得);并且,当容器销毁时,它自动销毁每个被包含的对转载 2006-07-08 19:00:00 · 1478 阅读 · 0 评论 -
条款8:不要把auto_ptr放入容器
条款8:不要把auto_ptr放入容器作者: winter 本来没有打算自己翻译Effective STL的,怕影响大家情绪:),只是发现有些条款在网络上找不到,只好自己翻译了。--Winter坦白的讲,这个条款不应加入本书,因为包含atuo_ptr的容器(COAPs)本来在STL中就是禁止的。就算你这么用了,编译器也不会编译你的代码。而标准委员会也没有解释为什么不能这样。对于COAP转载 2006-07-08 19:02:00 · 1046 阅读 · 0 评论 -
条款8:不要把auto_ptr放入容器
条款8:不要把auto_ptr放入容器作者: winter 本来没有打算自己翻译Effective STL的,怕影响大家情绪:),只是发现有些条款在网络上找不到,只好自己翻译了。--Winter坦白的讲,这个条款不应加入本书,因为包含atuo_ptr的容器(COAPs)本来在STL中就是禁止的。就算你这么用了,编译器也不会编译你的代码。而标准委员会也没有解释为什么不能这样。对于COAP转载 2006-07-08 19:03:00 · 985 阅读 · 0 评论 -
条款9:在删除选项中仔细选择
条款9:在删除选项中仔细选择假定你有一个标准STL容器,c,容纳int,Container c; 而你想把c中所有值为1963的对象都去掉。令人吃惊的是,完成这项任务的方法因不同的容器类型而不同:没有一种方法是通用的。如果你有一个连续内存容器(vector、deque或string——参见条款1),最好的方法是erase-remove惯用法(参见条款32):c.erase(re转载 2006-07-08 19:03:00 · 1185 阅读 · 0 评论 -
条款10:注意分配器的协定和约束
条款10:注意分配器的协定和约束分配器是怪异的。它们最初是为抽象内存模型而开发的,允许库开发者忽略在某些16位操作系统上near和far指针的区别(即,DOS和它的有害产物),但努力失败了。分配器也被设计成促进全功能内存管理器的发展,但事实表明那种方法在STL的一些部分会导致效率损失。为了避免效率冲击,C++标准委员会向标准中添加了词语,把分配器弱化为对象,同时也表达了他们不会让操作损失能力的转载 2006-07-08 19:04:00 · 1289 阅读 · 0 评论 -
条款11:理解自定义分配器的正确用法
条款11:理解自定义分配器的正确用法你用了基准测试,性能剖析,而且实验了你的方法得到默认的STL内存管理器(即allocator )在你的STL需求中太慢、浪费内存或造成过度的碎片的结论,并且你肯定你自己能做得比它好。或者你发现allocator对线程安全采取了措拖,但是你只对单线程的程序感兴趣,你不想花费你不需要的同步开销。或者你知道在某些容器里的对象通常一同被使用,所以你想在一个特别的堆里转载 2006-07-08 19:06:00 · 2104 阅读 · 0 评论 -
条款4:用empty()来代替检查size()是否为0
条款4:用empty()来代替检查size()是否为0对于任意容器c,写下if (c.size() == 0)...本质上等价于写下if (c.empty())...这就是例子。你可能会奇怪为什么一个构造会比另一个好,特别是事实上empty()的典型实现是一个返回size()是否返回0的内联函数。你应该首选empty()的构造,而且理由很简单:对于所有的标准容器,em转载 2006-07-08 18:55:00 · 900 阅读 · 0 评论 -
条款4:用empty()来代替检查size()是否为0
条款4:用empty()来代替检查size()是否为0对于任意容器c,写下if (c.size() == 0)...本质上等价于写下if (c.empty())...这就是例子。你可能会奇怪为什么一个构造会比另一个好,特别是事实上empty()的典型实现是一个返回size()是否返回0的内联函数。你应该首选empty()的构造,而且理由很简单:对于所有的标准容器,em转载 2006-07-08 18:55:00 · 1014 阅读 · 0 评论 -
WTL for MFC Programmers, Part I - ATL GUI Classes
Download demo project - 45.5 Kb Contents README.TXT Introduction to the Series Introduction to Part I ATL Background ATL and WTL history转载 2006-05-16 13:44:00 · 3569 阅读 · 0 评论 -
C++类静态数据成员与类静态成员函数
在没有讲述本章内容之前如果我们想要在一个范围内共享某一个数据,那么我们会设立全局对象,但面向对象的程序是由对象构成的,我们如何才能在类范围内共享数据呢? 这个问题便是本章的重点: 声明为static的类成员或者成员函数便能在类的范围内共同享,我们把这样的成员称做静态成员和静态成员函数。 下面我们用几个实例来说明这个问题,类的成员需要保护,通常情况下为了不违背类的封装特性,我们是把类成原创 2006-05-17 15:24:00 · 859 阅读 · 0 评论 -
WTL for MFC Programmers, Part II - WTL GUI Base Classes
Download demo project - 119 Kb Contents Introduction to Part II WTL Overview Beginning a WTL EXE WTL Message Map Enhancements What You Get with the WTL AppWiza转载 2006-05-16 13:48:00 · 2696 阅读 · 0 评论 -
深入分析MFC文档视图结构(项目实践)
深入分析MFC文档视图结构(项目实践) k_eckel:http://www.mscenter.edu.cn/blog/k_eckel文档视图结构(Document/View Architecture)是MFC的精髓,也是Observer模式的具体实现框架之一,Document/View Architecture通过将数据和其表示分开,提供了很好的数据层次和表现层次的解耦。然而转载 2006-06-25 08:59:00 · 1565 阅读 · 0 评论 -
Effective STL前言
It came without ribbons!It came without tags! It came without packages, boxes or bags!——Dr. Seuss, How the Grinch Stole Christmas!, Random House, 1957我第一次写关于Standard Template Library的东西是在1995年,那时,我决原创 2006-07-08 18:51:00 · 882 阅读 · 0 评论 -
条款1:仔细选择你的容器
条款1:仔细选择你的容器你知道C++中有很多你可以支配的容器,但是你意识到有多少吗?要确定你没有忽略你的选项,这里有一个快速回顾。 标准STL序列容器:vector、string、deque和list。 标准STL关联容器:set、multiset、map和multimap。 非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一原创 2006-07-08 18:53:00 · 837 阅读 · 0 评论 -
条款 2: 小心对“容器无关代码”的幻想
条款 2: 小心对“容器无关代码”的幻想STL是建立在泛型之上的。数组泛化为容器,参数化了所包含的对象的类型。函数泛化为算法,参数化了所用的迭代器的类型。指针泛化为迭代器,参数化了所指向的对象的类型。这只是个开始。独立的容器类型泛化为序列或关联容器,而且类似的容器拥有类似的功能。标准的内存相邻容器(参见条款1)都提供随机访问迭代器,标准的基于节点的容器(再参见条款1)都提供双向迭代器转载 2006-07-08 18:54:00 · 822 阅读 · 0 评论 -
条款3:使容器里对象的拷贝操作轻量而正确
条款3:使容器里对象的拷贝操作轻量而正确容器容纳了对象,但不是你给它们的那个对象。此外,当你从容器中获取一个对象时,你所得到的对象不是容器里的那个对象。取而代之的是,当你向容器中添加一个对象(比如通过insert或push_back等),进入容器的是你指定的对象的拷贝。当你从容器中获取一个对象时(比如通过front或back),你取到的是容器中那个对象的拷贝。拷进去,拷出来。这就是STL转载 2006-07-08 18:54:00 · 893 阅读 · 0 评论 -
条款12:对STL容器线程安全性的期待现实一些
条款12:对STL容器线程安全性的期待现实一些标准C++的世界是相当保守和陈旧的。在这个纯洁的世界,所有可执行文件都是静态链接的。不存在内存映射文件和共享内存。没有窗口系统,没有网络,没有数据库,没有其他进程。在这种情况下,当发现标准没有提到任何关于线程的东西时你不该感到惊讶。你对STL的线程安全有的第一个想法应该是它将因实现而不同。当然,多线程程序是很普遍的,所以大部分STL厂商努力使他转载 2006-07-08 19:06:00 · 1479 阅读 · 1 评论