C++语言程序设计课件 8第八讲——C++标准模板库.ppt

C++语言程序设计课件 8第八讲——C++标准模板库.ppt

  1. 1、本文档共196页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言程序设计课件8第八讲——C标准模板库

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 当数据元素的次序比有哪些信誉好的足球投注网站更重要时,选用 set, map, multiset, multimap,否则选hash_set, hash_ multiset , hash_ map,hash_ multimap ; 向容器中插入元素时,若无次序要求,请尽量加在后面。对于需要经常在序列容器的前部或中间增删元素,应采用list或slist。 尽量不使用C风格的字符串指针做键值,若必须用,则要显式地定义字符串比较函数 operator (),operator==(),operator=()等等; 若用容器作函数的参数,要使用容器对象的引用。 关联容器的选用 (以下文字摘自《Effective STL》,其中可能涉及到课件中没有提到的容器。) 你需要“可以在容器的任意位置插入一个新元素”的能力吗?如果是,你需要序列容器,关联容器做不到。 你关心元素在容器中的顺序吗?如果不,散列容器就是可行的选择。否则,你要避免使用散列容器。 必须使用标准C++中的容器吗?如果是,就可以除去散列容器、slist和rope。 你需要哪一类迭代器?如果必须是随机访问迭代器,在技术上你就只能限于vector、deque和string,但你也可能会考虑rope。如果需要双向迭代器,你就用不了slist和散列容器的一般实现。 如何选择容器 当插入或者删除数据时,是否非常在意容器内现有元素的移动?如果是,你就必须放弃连续内存容器。 容器中的数据的内存布局需要兼容C吗?如果是,你就只能用vector。 查找速度很重要吗?如果是,你就应该看看散列容器,排序的vector和标准的关联容器——大概是这个顺序。 你介意如果容器的底层使用了引用计数吗?如果是,你就得避开string,因为很多string的实现是用引用计数。你也不能用rope,因为权威的rope实现是基于引用计数的。于是你得重新审核你的string,你可以考虑使用vectorchar。 你需要插入和删除的事务性语义吗?也就是说,你需要有可靠地回退插入和删除的能力吗?如果是,你就需要使用基于节点的容器。如果你需要多元素插入的事务性语义,你就应该选择list,因为list是唯一提供多元素 插入事务性语义的标准容器。事务性语义对于有兴趣写异常安全代码的程序员来说非常重要。 你要把迭代器、指针和引用的失效次数减到最少吗?如果是,你就应该使用基于节点的容器,因为在这些容器上进行插入和删除不会使迭代器、指针和引用失效(除非它们指向你删除的元素)。一般来说,在连续内存容器上插入和删除会使所有指向容器的迭代器、指针和引用失效。 你需要具有有以下特性的序列容器吗:1)可以使用随机访问迭代器;2)只要没有删除而且插入只发生在容器结尾,指针和引用的数据就不会失效?这个一个非常特殊的情况,但如果你遇到这种情况,deque就是你梦想的容器。(有趣的是,当插入只在容器结尾时,deque的迭代器也可能会失效,deque是唯一一个“在迭代器失效时不会使它的指针和引用失效”的标准STL容器。) 重新认识string类1 std::string是类模板basic_string的元素类型为char的特化。basic_string是针对字符串操作的实现和优化,于是不能用于char以外的对象。不同于字符串的是,’\0’不再是结束标志,而是string对象中的合法字符了。 std::string 类的构造函数接受C指针作实参,但并不负责检查其有效性。使用时必须保证该指针所指是合法串而不是NULL. std::string中定义了成员函数c_str()和data(),能返回C的指针,但没定义向C字符串的转换函数 (operator Element *()const { return _Ptr; } ) 其中作梗的就是’\0’. 重新认识string类2 std::string是容器,具有容器的一般特征,如支持动态内存分配、动态插入、删除、存储空间再分配、迭代器失效等等,很类似于vectorchar。 另外string类还提供了和C字符串的比较运算,如==、!=、=、=、、、+等的重载版本。 std::string类中保存了字符串的长度信息,可由成员函数直接返回,效

文档评论(0)

zhuwenmeijiale + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:7065136142000003

1亿VIP精品文档

相关文档