STL
pizi0475
这个作者很懒,什么都没留下…
展开
-
熟悉标准库
C++标准库很大。非常大。难以置信的大。怎么个大法?这么说吧:在C++标准中,关于标准库的规格说明占了密密麻麻300多页,这还不包括标准C库,后者只是 "作为参考"(老实说,原文就是用的这个词)包含在C++库中。当然,并非总是越大越好,但在现在的情况下,确实越大越好,因为大的库会包含大量的功能。标准库中的功能越多,开发自己的应用程序时能借助的功能就越多。C++库并非提供了一切(很明显的是,没有转载 2015-07-01 15:29:00 · 1185 阅读 · 0 评论 -
读《C++语言的设计和演化》有感
C++ Primer送人了,但是身边没有一本纸质的C++权威手册有时还是不方便,于是购买了C++之父的三本书——《C++程序设计语言》,《C++程序设计原理与实践》和《C++语言的设计和演化》。<br /><br />第三本书是我比较喜欢的历史八卦+技术的,于是先读了。<br /><br />这本书里Stroustrup倒是澄清了几个问题,似乎能解决长期以来大家的一些争论<br /><br />1.C++之父对于C语言的贡献、<br /> 许多人将C++中的“不优雅”归结于对C的兼容,C++大牛们的几本书转载 2011-03-30 08:58:00 · 2023 阅读 · 0 评论 -
C++——STL所有算法介绍
<br /> STL算法部分主要由头文件<algorithm>,<numeric>,<functional>组成。要使用 STL中的算法函数必须包含头文件<algorithm>,对于数值算法须包含<numeric>,<functional>中则定义了一些模板类,用来声明函数对象。<br /> STL中算法大致分为四类:<br /> 1、非可变序列算法:指不直接修改其所操作的容器内容的算法。<br /> 2、可变序列算法:指可以修改它们所操作的容器内容的算法。<br />转载 2011-03-29 18:41:00 · 1947 阅读 · 0 评论 -
C++模板的缺点以及如何避免
<br /> templates(模板)是节省时间和避免代码重复的极好方法,我们可以只输入一个类模板,就能让编译器实例化所需要的很多个特定类及函数。类模板的成员函数只有被使用时才会被实例化,所以只有在每一个函数都在实际中被使用时,我们才会得到这些函数。 确实这是一个很重要的技术,但是如果不小心,使用模板可能会导致代码膨胀。什么是代码膨胀?请看下面的例子: <br /><br /><br />template class A { public:转载 2011-03-28 18:53:00 · 4861 阅读 · 0 评论 -
c++模板的优点和缺点
<br />作为C++语言的新组成部分,模板引入了基于通用编程的概念。通用编程是一种无须考虑特定对象的描述和发展算法的方法,因此它与具体数据结构无关。但在决定使用C++模板之前,让我们分析一下使用模板的优缺点。<br /><br />目的:<br />当被问及引入C++模板的目的时,C++的发明者Bjarne Stroustrup告诉我“这是为了支持类型安全、类容器的有效性和算法的通用性”。<br />优势和劣势:<br />使用模板有很多原因,最主要的为了得到通用编程的优点。国际标准化组织(ISO)为C+转载 2011-03-28 18:55:00 · 4701 阅读 · 0 评论 -
使用C++模板的优点和缺点
<br />作为C++语言的新组成部分,模板引入了基于通用编程的概念。通用编程是一种无须考虑特定对象的描述和发展算法的方法,因此它与具体数据结构无关。但在决定使用C++模板之前,让我们分析一下使用模板的优缺点。<br />目的: 当被问及引入C++模板的目的时,C++的发明者Bjarne Stroustrup告诉我“这是为了支持类型安全、类容器的有效性和算法的通用性”。<br />优势和劣势: 使用模板有很多原因,最主要的为了得到通用编程的优点。国际标准化组织(ISO)为C++建立了C++标准库,该标准库功转载 2011-03-28 18:54:00 · 2594 阅读 · 0 评论 -
C++标准库和C++标准模版库
<br /> C++标准库很大,在现在的情况下,C++标准库确实越来越好,因为大的库会包含大量的功能.标准库中的功能越多,开发自己的应用程序时能借助的功能就越多,C++库并非提供一切(很明显的是没有提供开发和图形用户接口的支持),但确实提供了很多.标准C++库中主要有以下主要组件:<br />标准C库.<br /> I/0流技术.<br /> String.<br /> 容器.<br /> 算法.<br /> 对国际化的支持.<br /> 对数字处理的支持.<b转载 2011-03-27 18:18:00 · 1358 阅读 · 1 评论 -
C++标准库简介
<br />C++标准库的所有头文件都没有扩展名。C++标准库的内容总共在50个标准头文件中定义,其中18个提供了C库的功能。 <cname>形式的标准头文件【 <complex>例外】其内容与ISO标准C包含的name.h头文件相同,但容纳了C++扩展的功能。在 <cname>形式标准的头文件中,与宏相关的名称在全局作用域中定义,其他名称在std命名空间中声明。在C++中还可以使用name.h形式的标准C库头文件名。<br /><br />C++标准库的内容分为10类:<br /><br />C1.语言支转载 2011-03-27 18:16:00 · 1302 阅读 · 0 评论 -
STL deque 优势分析
<br />引子<br />std::TextPool 基于 std::deque 实现。所以尽管本文讨论 std::deque,但是所有的结论对 std::TextPool 同样有效。<br />实现概要<br />顾名思义,这是一个“双向队列(double-ended queue)”。这意味着从队列开始和结束处插入(删除)数据的性能很好。为了达到这个目的,std::deque 基于一种分段连续的、介于数组和链表之间的数据结构,示意如下:<br /><br />template <br />class d转载 2011-03-27 18:02:00 · 2509 阅读 · 0 评论 -
STL之父Alex Stepanov亚历山大·斯特潘诺夫
<br />亚历山大·斯特潘诺夫(Alexander Stepanov),Alex Stepanov,STL(标准模板库)之父,并因此而荣获第一届Dr. Dobb's 程序设计杰出奖,现在是Adobe公司首席科学家。他曾是康柏电脑公司的副总裁和首席科学家,AT&T实验室副总裁和首席架构师,SGI服务和超级计算机业务首席技术官。目录• 个人简介• 程序基于精确的数学——STL之父Alex Stepanov访谈录• 轻轻松松学习C++ 标准模板库STL• 参考文献个人简介回目录<br />Alexander S转载 2011-03-14 21:15:00 · 6558 阅读 · 0 评论 -
轻轻松松学习C++ 标准模板库STL
<br />作为C++标准不可缺少的一部分,STL应该是渗透在C++程序的角角落落里的。STL不是实验室里的宠儿,也不是程序员桌上的摆设,她的激动人心并非昙花一现。本教程旨在传播和普及STL的基础知识,若能借此机会为STL的推广做些力所能及的事情,到也是件让人愉快的事情。 <br />初识STL:解答一些疑问 <br />1.1 一个最关心的问题:什么是STL <br />"什么是STL?",假如你对STL还知之甚少,那么我想,你一定很想知道这个问题的答案,坦率地讲,要指望用短短数言将这个问题阐述清楚,也决转载 2011-03-14 21:12:00 · 2410 阅读 · 0 评论 -
CString和string区别
<br />CString,是ATL/MFC共享的, string是C++标准库的<br /><br /> 相同点:<br />(1)用他们都可以取代对char*的使用。<br />(2)都封装了有丰富的字符串操作接口。<br />(3)他们都是C++的类库。--<br />以string的使用为例,不能有如下用法:<br /> string * pstr = NULL; //定义一个指向字符串的指针<br /> pstr->append("Hell转载 2011-04-04 16:21:00 · 1555 阅读 · 2 评论 -
STL的内存分配器
<br />题记:内存管理一直是C/C++程序的红灯区。关于内存管理的话题,大致有两类侧重点,一类是内存的正确使用,例如C++中new和delete应该成对出现,用RAII技巧管理内存资源,auto_ptr等方面,很多C/C++书籍中都使用技巧的介绍。另一类是内存管理的实现,如linux内核的slab分配器,STL中的allocator实现,以及一些特定于某种对象的内存管理等。最近阅读了一些内存管理实现方面的资料和源码,整理了一下,汇编成一个系列介绍一些常用的内存管理策略。 <br />1. STL容器简介转载 2011-04-04 18:34:00 · 6804 阅读 · 0 评论 -
CString/string/char*比较详解
<br /> 关键点:<CStirng>主要用于MFC的编写,而<string>属于STL,两者都是符合标准C++的,但是在非 windows平台或者说VC上还是用<string>吧。另外还有一个<string.h>这是传统C++才有的~ <br /> (一) 概述 <br /> string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中; <br /> CString(typedef CStringT> CString)为Visua转载 2011-04-04 16:19:00 · 1576 阅读 · 0 评论 -
intel Threading Building Blocks 入门 (hello,TBB)
Intel Threading BuildingBlocks(Intel TBB)是一个使用ISO C++代码实现的多平台、可扩展并行编程库。但目前为止这方面的中文资料却很少。初步了解TBB时,并非每个人都打算看官方提供的资料,即使是Intel Threading BuildingBlocks Tutorial。TBB的结构:上图的内容可以分为以下几类:l 通用并行算法T转载 2013-01-15 16:53:30 · 3540 阅读 · 0 评论 -
C++的风格与技巧
C++的风格与技巧翻译:左轻侯(译注:本文的翻译相当艰苦。Bjarne Stroustrup不愧是创立C++语言的一代大师,不但思想博大精深,而且在遣词造句上,也非常精微深奥。有很多地方,译者反复斟酌,都不能取得理想的效果,只能尽力而为。Html格式的文档见译者主页:http://www.wushuang.net如果你对这个翻译稿有任何意见和建议,请发信给译者:onekey@163转载 2010-02-04 15:12:00 · 1335 阅读 · 0 评论 -
深入研究 C++中的 STL Deque 容器
本文档深入分析了std::deque,并提供了一个指导思想:当考虑到内存分配和执行性能的时候,使用std::deque要比std::vector好。 介绍 本文深入地研究了std::deque 容器。本文将讨论在一些情况下使用deque> 比vector更好。读完这篇文章后读者应该能够理解在容量增长的过程中deque 与vector在内存分配和性能的不同表现。由于deque>转载 2012-04-27 10:22:46 · 1458 阅读 · 0 评论 -
多线程共享资源冲突
多线程共享资源冲突 delphi中多线程同步的一些方法 当有多个线程的时候,经常需要去同步这些线程以访问同一个数据或资源。例如,假设有一个程序,其中一个线程用于把文件读到内存,而另一个线程用于统计文件中的字符数。当然,在把整个文件调入内存之前,统计它的计数是没有意义的。但是,由于每个操作都有自己的线程,操作系统会把两个线程当作是互不相干的任务分别执行,这样就可能在没有把整个文件装入内存时统计字数。转载 2010-02-04 15:08:00 · 3183 阅读 · 0 评论 -
shared_ptr相关小结
<br />程序中,有些对象的生命周期是静态的可预测的,这时只要把构造销毁的时机硬编码进程序即可;然而有些对象的生命周期却和运行时环境相关(例如在线程间共享对象,无“引用”时销毁),对于这种类型的对象必须借助额外的信息和设施来控制,基于引用计数的封装boost::shared_ptr及其相关设施就是其中一种(我所了解的还有基于标记-清除的GC),下面就易错的地方小结下:一般而言,不要同时使用boost::shared_ptr和其他的管理机制来管理对象的生命周期,这样会发生语义上的矛盾,极有可能出现运行时错误转载 2011-04-11 18:01:00 · 1775 阅读 · 0 评论 -
auto_ptr与shared_ptr --- auto_ptr
Roger (roger2yi@gmail.com) 这篇文章试图说明如何使用auto_ptr和shared_ptr,从而使得动态分配对象的使用和管理更安全,方便。除了一般的使用说明外,更主要是说明它们之间的异同 —— 满足需求的不同和开销上的差异。 文章的多数知识都来源于: <!--[if !supportLists]-->1. <!--[endif]-->Exceptional C++(Herb)Item 37 auto_ptr<!--[if !supportLists]-->2. <!--[endif转载 2011-04-11 17:55:00 · 1918 阅读 · 0 评论 -
shared_ptr用法
头文件: "boost/shared_ptr.hpp"<br />几乎所有稍微复杂点的程序都需要某种形式的引用计数智能指针。这些智能指针让我们不再需要为了控制被两个或多个对象共享的对象的生存期而编写复杂的逻辑。当引用计费降为零,没有对象再需要这个共享的对象,这个对象就自动被销毁了。引用计数智能指针可以分为插入式(intrusive)和非插入式(non-intrusive)两类。前者要求它所管理的类提供明确的函数或数据成员用于管理引用计数。这意味着在类的设计时就必须预见到它将与一个插入式的引用计数智能指针一起转载 2011-04-11 17:59:00 · 1987 阅读 · 0 评论 -
深入new
<br />“new”是C++的一个关键字,同时也是操作符。关于new的话题非常多,因为它确实比较复杂,也非常神秘,下面我将把我了解到的与new有关的内容做一个总结。new的过程当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。假如我们定义了如下一个类A:class A<br />{<br /> int i;<br />public:<br /> A(int _i) :i(_i转载 2011-04-14 09:21:00 · 1432 阅读 · 0 评论 -
shared_ptr源码解读
<br />1 介绍<br />众所周知,auto_ptr由于它的破坏性复制语义,无法满足标准容器对元素的要求,因而不能放在标准容器中;如果我们希望当容器析构时能自动把它容纳的指针元素所指的对象删除时,通常采用一些间接的方式来实现,显得比较繁琐。boost库中提供了一种新型的智能指针 shared_ptr,它解决了在多个指针间共享对象所有权的问题,同时也满足容器对元素的要求,因而可以安全地放入容器中。现在我们可以这样写: <br />vector< shared_ptr<Book> > books;<br转载 2011-04-11 17:57:00 · 2741 阅读 · 0 评论 -
有感于STL的内存管理
<br />1. 背景<br /><br />前些天在一个技术分享会上,某大牛说,STL使用了内存池,释放内存的时候,并不释放给OS,而是自己由留着用。<br /><br />听到这些观点后,我就有些着急了,因为我以前一直是直接使用STL的一些工具类的,比如std::string、std::map、std::vector、std::list等等,从来都没有关注过内存的问题。<br /><br />带着内存的问题,我花了两三天的时间去阅读STL的代码,并且写一些简单的程序进行测试;下面列举一些心得体会,但是却转载 2011-04-04 18:33:00 · 7139 阅读 · 1 评论 -
STL的不同实现版本
HP STLHP STL是所有其它STL实现版本的根源。它是STL之父Alexander Stepanov在惠普的Palo Alto实验室工作时,和Meng Lee共同完成的,是第一个STL的实现版本(参见1.2节)。这个STL是开放源码的,所以它允许任何人免费使用、复制、修改、发布和销售该软件和相关文档,前提是必须在所有相关文件中加入HP STL的版本信息和授权信息。现在已经很少直接使用这个版本的STL了。P.J. Plauger STLP. J. Plauger STL属于个人作品,由P. J. Pl转载 2011-03-14 21:05:00 · 1705 阅读 · 0 评论 -
STL的常用算法
非修改性序列操作(12个)循环for_each()对序列中的每个元素执行某操作查找find()在序列中找出某个值的第一次出现的位置find_if()在序列中找出符合某谓词的第一个元素find_end()在序列中找出一子序列的转载 2010-05-05 21:53:00 · 2944 阅读 · 1 评论 -
STL算法原理分析
一、判断算法的代码好坏,通过以标准(1).系统、内存性能标准 在一种算法需要大的存储空间时,初始数据大小要求高。另一种系统执行效率并不高,但需内存较少。 在某些情况下,第一种算法根本不能执行、而另一种较差在内存有限时还是却可以执行不过这样问题在 现代计算机中显示并不那么重要。 (2)、算法性能标准:时间复杂度分析 我们一般定义一个函数T(h),该函数基于n来计算执行频度其实这个标准就描述转载 2010-05-05 21:57:00 · 1733 阅读 · 0 评论 -
stl总结(转)
STL(Standard Template Library)是C++标准庫的一部分(80%),是用C++ Template机制来表达泛型的庫。STL,成功的将算法与数据结构分离,在没有效率损失的前提下,得到了及大的弹性。六大组件容器(Container)算法(Algorithm)迭代器(Iterator)仿函数(Function object)适配器(Adaptor)空间配制器(all原创 2010-03-04 17:24:00 · 1856 阅读 · 0 评论 -
STL中: string、vector、list、deque、set、map 的区别
在STL中基本容器有: string、vector、list、deque、set、mapset 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问set:集合, 用来判断某一个元素是不是在一个组里面,使用的比较少map:映射,相当于字典,把一个值映射成另一个值,如果想创建字典的话使用它好了string、vector、list、deque、set 是有序容器 1.str转载 2010-03-04 17:27:00 · 1900 阅读 · 0 评论 -
c++中的explicit关键字
c++中的explicit关键字c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示: class MyClass{public:MyClass( int num );转载 2010-02-04 15:17:00 · 1248 阅读 · 0 评论 -
STL 陷阱或缺陷
6.6 Map在Map中移除元素时,当心发生意外状况。当你移除迭代器所指对象时,有一个很大的危险,看看这个例子:typedef map sim;sim coll;sim::iterator pos;.......for(pos = coll.begin(); pos != coll.end(); ++pos) { if(pos->second == value转载 2010-02-03 10:20:00 · 2085 阅读 · 1 评论 -
STL容器erase的使用陷阱(三)
原文:http://www.fengwanfeng.com/article.asp?id=42三、List容器中删除元素的方法对于list容器,由于list本身有remove和remove_if的成员函数,所以最好优先考虑list自己的算法,对于remove函数,比较简单,不再讨论,对于remove_if函数,本人发现在vc6.0中有重大问题。我试了多种函数对象,总是编译不过,通过查看源代码,转载 2010-02-03 10:18:00 · 1581 阅读 · 0 评论 -
了解CObject 和 CRuntimeClass
作者:林水怒 shuinu@163.net转载请保留作者署名 CObject和CRuntimeClass是MFC中两个非常重要的类/结构,绝大部分MFC类都是以CObject做为基类, CRuntimeClass结构同CObject密不可分,了解它们对于深入理解MFC具有重要意义。 一、CRuntimeClass结构要理解CObject,我们先来看一下CRuntimeClass这个在MFC中至转载 2010-02-04 15:10:00 · 1159 阅读 · 0 评论 -
C++连接Oracle
C++连接Oracle 在Visual C++下开发Oracle库接口主要有两种方法。一种方法是利用Visual C++提供的多种数据库访问技术,如开放数据库连接ODBC、数据存取对象DAO、对象连接和嵌入数据库OLE DB和ActiveX数据对象ADO等。另一种方法是在Visual C++中嵌入SQL语句,这就是所指的Pro*C/C++(本文简称PROC)。前一种方法由于有MF原创 2010-02-04 15:06:00 · 2105 阅读 · 0 评论 -
高质量C++/C编程指南
高质量C++/C编程指南 文件状态[ ] 草稿文件[√] 正式文件[ ] 更改正式文件 文件标识: 当前版本: 1.0 作 者: 林锐 博士 完成日期: 2001年7月24日版 本 历 史版本/状态 作者 参与者 起止日期 备注V 0.9草稿文件 林锐 2001-7-1至2001-7-18 林锐起草V 1.0正式文件 林锐 2001-7-18至20原创 2010-02-04 15:04:00 · 2158 阅读 · 0 评论 -
STL中string的源码解读
STL中string的源码解读 Ryan pengcutezero@163.comSunday, June 03, 2007 这是个人最近比较闲暇之余,对SGI STL中string分析,如果有任何理解错误,请和我联系,谢谢! 为什么要分析string呢?我们知道大多数的编译器实现的string都各不相同(即便是同一个编译厂商在不同的版本string的实现也不一样,例如转载 2010-02-04 14:49:00 · 7270 阅读 · 1 评论 -
STL序列式容器中删除元素的方法和陷阱 一
在STL(标准模板库)中经常会碰到要删除容器中部分元素的情况,本人在编程中就经常编写这方面的代码,在编码和测试过程中发现在STL中删除容器有很多陷阱,网上也有不少网友提到如何在STL中安全删除元素这些问题。本文将讨论编程过程中最经常使用的两个序列式容器vector、list中安全删除元素的方法和应该注意的问题, 其它如queue、stack等配接器容器(container adap转载 2010-02-03 10:16:00 · 1199 阅读 · 0 评论 -
STL中的常用的vector,map,set,sort, list用法笔记(转)
原帖地址:http://hi.baidu.com/yanfei_1/blog/item/a0a538331f5256f91a4cffba.htmlC++的标准模板库(Standard Template Library,简称STL)是一个容器和算法的类库。容器往往包含同一类型的数据。STL中比较常用的容器是vector,set和map,比较常用的算法有Sort等。.一. vector1转载 2010-03-04 17:25:00 · 2331 阅读 · 0 评论 -
标准模板库(STL)习题
一. 基本概念与基础知识自测题11.1 填空题11.1.1 STL大量使用继承和虚函数是 (1) (填对或错)。因为 (2) 。答案:(1)错(2)它使用的是模板技术,追求的是运行的效率,避免了虚函数的开销 11.1.2 有两种STL容器: (1) 和 (2) 。STL不用new和delete,而用 (3) 实现各种控制内存分配和释放的转载 2010-03-11 09:15:00 · 3633 阅读 · 0 评论 -
Effective STL 笔记
虽然用C++很久了,但STL我一直都处于初级阶段,从书上的示例代码断章取义地用,感觉非常不顺手。所以我需要一本讲STL很深,但又不太深(我指的是涉及源码分析)的书,这本无疑是最好的。第1条:慎重选择容器类型 STL容器的分类远比我想像中的多。别人意外的是stack,queue等不是STL容器,但这不是这章的重点。在多数应用中,只有可能有一种容器供符合你的要求,尽管我觉得转载 2010-03-15 16:00:00 · 2329 阅读 · 0 评论