自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Black_Man的专栏

--在技术的道路上摸索前进……

  • 博客(15)
  • 收藏
  • 关注

转载 条款11:理解自定义分配器的正确用法

条款11:理解自定义分配器的正确用法你用了基准测试,性能剖析,而且实验了你的方法得到默认的STL内存管理器(即allocator )在你的STL需求中太慢、浪费内存或造成过度的碎片的结论,并且你肯定你自己能做得比它好。或者你发现allocator对线程安全采取了措拖,但是你只对单线程的程序感兴趣,你不想花费你不需要的同步开销。或者你知道在某些容器里的对象通常一同被使用,所以你想在一个特别的堆里

2006-07-08 19:06:00 2095

转载 条款12:对STL容器线程安全性的期待现实一些

条款12:对STL容器线程安全性的期待现实一些标准C++的世界是相当保守和陈旧的。在这个纯洁的世界,所有可执行文件都是静态链接的。不存在内存映射文件和共享内存。没有窗口系统,没有网络,没有数据库,没有其他进程。在这种情况下,当发现标准没有提到任何关于线程的东西时你不该感到惊讶。你对STL的线程安全有的第一个想法应该是它将因实现而不同。当然,多线程程序是很普遍的,所以大部分STL厂商努力使他

2006-07-08 19:06:00 1471 1

转载 条款10:注意分配器的协定和约束

条款10:注意分配器的协定和约束分配器是怪异的。它们最初是为抽象内存模型而开发的,允许库开发者忽略在某些16位操作系统上near和far指针的区别(即,DOS和它的有害产物),但努力失败了。分配器也被设计成促进全功能内存管理器的发展,但事实表明那种方法在STL的一些部分会导致效率损失。为了避免效率冲击,C++标准委员会向标准中添加了词语,把分配器弱化为对象,同时也表达了他们不会让操作损失能力的

2006-07-08 19:04:00 1276

转载 条款8:不要把auto_ptr放入容器

条款8:不要把auto_ptr放入容器作者: winter 本来没有打算自己翻译Effective STL的,怕影响大家情绪:),只是发现有些条款在网络上找不到,只好自己翻译了。--Winter坦白的讲,这个条款不应加入本书,因为包含atuo_ptr的容器(COAPs)本来在STL中就是禁止的。就算你这么用了,编译器也不会编译你的代码。而标准委员会也没有解释为什么不能这样。对于COAP

2006-07-08 19:03:00 977

转载 条款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 1168

转载 条款8:不要把auto_ptr放入容器

条款8:不要把auto_ptr放入容器作者: winter 本来没有打算自己翻译Effective STL的,怕影响大家情绪:),只是发现有些条款在网络上找不到,只好自己翻译了。--Winter坦白的讲,这个条款不应加入本书,因为包含atuo_ptr的容器(COAPs)本来在STL中就是禁止的。就算你这么用了,编译器也不会编译你的代码。而标准委员会也没有解释为什么不能这样。对于COAP

2006-07-08 19:02:00 1030

转载 条款7.使用包含由new产生的指针容器时,切记在容器销毁前delete指针

条款7.使用包含由new产生的指针容器时,切记在容器销毁前delete指针容器在STL中被认为是智能的。它们支持向前和向后的迭代器;它们能告诉你它所保存的对象类型(通过typedef value_type);在插入和删除过程中它们进行了良好的内存管理;它们将报告自己包含了多少对象和自己最多能包含多少对象(分别通过size和max_size取得);并且,当容器销毁时,它自动销毁每个被包含的对

2006-07-08 19:00:00 1470

转载 条款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 950

转载 条款5:尽量使用区间成员函数代替它们的单元素兄弟

条款5:尽量使用区间成员函数代替它们的单元素兄弟快!给定两个vector,v1和v2,使v1的内容和v2的后半部分一样的最简单方式是什么?不要为“当v2有偶数个元素时才有一半”而烦恼,只要做一些合理的东西。时间到!如果你的答案是v1.assign(v2.begin() + v2.size() /2, v2.end()); 或者其他很相似的东西,你就答对了,可以获得金质奖章。如果你的

2006-07-08 18:57:00 1092

转载 条款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 1009

转载 条款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 889

转载 条款 2: 小心对“容器无关代码”的幻想

 条款 2: 小心对“容器无关代码”的幻想STL是建立在泛型之上的。数组泛化为容器,参数化了所包含的对象的类型。函数泛化为算法,参数化了所用的迭代器的类型。指针泛化为迭代器,参数化了所指向的对象的类型。这只是个开始。独立的容器类型泛化为序列或关联容器,而且类似的容器拥有类似的功能。标准的内存相邻容器(参见条款1)都提供随机访问迭代器,标准的基于节点的容器(再参见条款1)都提供双向迭代器

2006-07-08 18:54:00 808

转载 条款3:使容器里对象的拷贝操作轻量而正确

 条款3:使容器里对象的拷贝操作轻量而正确容器容纳了对象,但不是你给它们的那个对象。此外,当你从容器中获取一个对象时,你所得到的对象不是容器里的那个对象。取而代之的是,当你向容器中添加一个对象(比如通过insert或push_back等),进入容器的是你指定的对象的拷贝。当你从容器中获取一个对象时(比如通过front或back),你取到的是容器中那个对象的拷贝。拷进去,拷出来。这就是STL

2006-07-08 18:54:00 882

原创 条款1:仔细选择你的容器

条款1:仔细选择你的容器你知道C++中有很多你可以支配的容器,但是你意识到有多少吗?要确定你没有忽略你的选项,这里有一个快速回顾。 标准STL序列容器:vector、string、deque和list。 标准STL关联容器:set、multiset、map和multimap。 非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一

2006-07-08 18:53:00 827

原创 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 874

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除