C++提供了一组功能强大的库,这些库提供了很多常见编程问题的解决方案以及简化其他问题的工具string类为将字符串作为对象来处理提供了一种方便的方法。string类提供了自动内存管理动能以及众多处理字符串的方法和函数。例如,这些方法和函数让您能够合并字符串、将一个字符串插入到另一个字符串中、反转字符串、在字符串中搜索字符或姊姊富川以及执行输入和输出操作。
诸如auto_ptr以及C++11新增的shared_ptr和unique_ptr等智能指针模板使得管理由new分配的内存更容易。如果使用这些智能指针(而不是常规指针)来保存new返回的地址,则不比在以后使用删除运算符。智能指针对象过期时,其析构函数将自动调用delete运算符。
STL是一个容器类模板、迭代器类模板、函数对象模板和算法函数模板的集合,它们的设计是一致的,都是基于泛型编程原则的。算法通过使用模板,从而独立于所存储的对象的类型;通过使用迭代器接口,从而独立于容器的类型。迭代器是广义指针。
STL使用术语“概念”來描述一组要求。例如,正向迭代器的概念包含这样的要求,即正向迭代器能
够被解除引用,以便读写,问时能够被递增。概念真正的实现方式被称为概念的“模型”例如,正向迭代器概念可以是常规指针或导航链表的对象。基于其他概念的概念叫作“改进”例如,双向迭代器是正向迭代器概念的改进。
诸如vector和set等容器类是容器概念(如容器、序列和关联容器)的模型。STL定义了多种容器类模板: vector 、 deque 、 list 、 set 、 multiset 、 map、multimap 和 bitset; 还定义了适配器类模板 queue、priority——queue和stack;这些类让底层容器类能够提供适配器类模板名称所建议的特性接口。因此,stack虽然在默认情况下是基于vector的,但仍只允许在栈顶进行插入和删除。C++11新增了forward_list、unordered_set 、unordered_multisct、unordered_map和unordered_multimap。
有些算法被表示为容器类方法,但大量算法都被表示为通用的、非成员函数,这是通过将迭代器作为容器和算法之间的接口得以实现的。这种方法的一个优点是:只需一个诸如for_each()或copy()这样的函数,而不必为每种容器提供一个版本;另一个优点是:STL算法可用于非STL容器,如常规数组、string对象、array对象以及您设计的秉承STL迭代器和容器规则的任何类。
容器和算法都是由其提供或需要的迭代器类型表征的。应当检查容器是否具备支持算法要求的迭代器概念。例如, for_each()算法使用一个输入迭代器,所有的STL容器类类型都满足其最低要求:而sort()则要求随机访问迭代器,并非所有的容器类都支持这种迭代器。如果容器类不能满足特定算法的要求,则可能提供一个专用的方法。例如,list类包含一个基于双向迭代器的sort()方法,因此它可以使用该方法,而不是通用函数。
STL还提供了函数对象(函数符), 函数对象足重载了()运算符(即定义了operator()()方法)的类。可以使用函数表示法来调用这种类的对象,同时可以携带额外的信息。自适应函数符有typedef语句,这种语句标识了函数符的参数类型和返回类型。这些信息可供其他组件(如函数适配器)使用。
通过表示常用的容器类型,并提供各种使用高效算法实现的常用操作(全部是通用的方式实现的),STL提供了一个非常好的克重用代码源。可以直接使用STL工具来解决编程问题,也可以把它们作为基本不见,来构建所需的解决方法。
模板类complex和valarray支持复数和数组的数值运算。

《C++ Primer Plus》第16章 string类和标准模板库 学习笔记的更多相关文章

  1. C++ primer plus读书笔记——第16章 string类和标准模板库

    第16章 string类和标准模板库 1. string容易被忽略的构造函数: string(size_type n, char c)长度为n,每个字母都为c string(const string ...

  2. C++——string类和标准模板库

    一.string类 1.构造函数 string实际上是basic_string<char>的一个typedef,同时省略了与内存管理相关的参数.size_type是一个依赖于实现的整型,是 ...

  3. 《C++ Primer Plus》16.3 标准模板库 学习笔记

    STL提供了一组表示容器.迭代其.函数对象和算法的模板.容器是一个与数组类似的单元,可以存储若干个值.STL容器是同质的,即存储的值的类型相同:算法是完成特定任务(如对数组进行排序或在链表中查找特定值 ...

  4. 《C++ Primer Plus》16.1 string类 学习笔记

    16.1.1 构造字符串程序清单16.1使用了string的7个构造函数.程序清单16.1 str1.cpp---------------------------------------------- ...

  5. C++标准模板库Stand Template Library(STL)简介与STL string类

    参考<21天学通C++>第15和16章节,在对宏和模板学习之后,开启对C++实现的标准模板类STL进行简介,同时介绍简单的string类.虽然前面对于vector.deque.list等进 ...

  6. 如何导出标准模板库(STL)类的实例化和包含STL类对象数据成员的类

    本文翻译自 https://support.microsoft.com/zh-cn/help/168958/how-to-export-an-instantiation-of-a-standard-t ...

  7. (18)C++ string和标准模板库

    一.stringl类 1.string构造函数 string a1("abc");//初始化字符串 cout<<a1<<endl;//abc , '#'); ...

  8. C++标准模板库集合类与映射类总结

    一.STL集合类 标准模板库向程序员提供了一些容器类,以便在应用程序中频繁而快速的搜索.std::set和std::multiset用于存储一组经过排序的元素,其查找元素的复杂度为对数,而unorde ...

  9. C++ Primer 5th 第16章 模板与泛型编程

    模板是C++中泛型编程的基础,一个模板就是创建一个类或者函数的蓝图或者说公式. C++模板分为函数模板和类模板. 类模板则可以是整个类是个模板,类的某个成员函数是个模板,以及类本身和成员函数分别是不同 ...

随机推荐

  1. 怎么用一个ppt介绍一个项目

  2. (笔记)Mysql命令desc:获取数据表结构

    desc命令用于获取数据表结构. desc命令格式:    desc 表名;同样    show columns from 表名;也能获取数据表结构. 举例如下:mysql> desc MyCl ...

  3. MongoDB MapReduce 小例子

    var map = function(){ if (this.gscode == "ZTJB"){ ymd = this.ymd; emit("maxymd", ...

  4. Solr系列五:solr搜索详解(solr搜索流程介绍、查询语法及解析器详解)

    一.solr搜索流程介绍 1. 前面我们已经学习过Lucene搜索的流程,让我们再来回顾一下 流程说明: 首先获取用户输入的查询串,使用查询解析器QueryParser解析查询串生成查询对象Query ...

  5. Lua------------------unity与lua的热更新

    [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘终结篇:UniLua热更新完全解读 标签: 游戏开发游戏解决方案用户体验unity3d 2014-10-18 23:23 7680人阅读 ...

  6. application/json 与 application/x-www-form-urlencoded的简单比较

    application/x-www-form-urlencoded 提交请求示例 curl -X POST 'http://localhost:8080/formPost' -d 'id=1& ...

  7. LigerUI可编辑表格左下角出现白色小方块遮罩层问题解决办法

    LigerUI已经研究了一段时间,总体感觉还不错,基于jQuery开发,框架提供了丰富的UI组件,尤其LigerUI表格,功能还是挺强大的 在使用LigerUI可编辑表格的时候,发现一个小小的问题 当 ...

  8. SqlException with message "Caught java.io.CharConversionException." and ERRORCODE=-4220

    Technote (troubleshooting) Problem(Abstract) When an application uses the IBM Data Server Driver for ...

  9. Error while adding new interface: failed to open /dev/vboxnetctl: No such file or directory

    Try this : sudo modprobe vboxnetadp ref: https://github.com/gasolin/foxbox/issues/32

  10. js 事件调度

    var EventTarget = function () { this._listener = {}; }; EventTarget.prototype = { constructor: this, ...