新書推薦:
《
骨科康复学(第2版)
》
售價:NT$
1140.0
《
笔记启蒙 : 英国皇家学会与科学革命
》
售價:NT$
390.0
《
汉语副词研究论集(第六辑)
》
售價:NT$
490.0
《
镶嵌之美:古希腊罗马的马赛克艺术
》
售價:NT$
1390.0
《
后希腊化哲学:从斯多亚学派到奥利金的发展研究
》
售價:NT$
349.0
《
别纠结啦:不被情绪牵着走的通透生活指南(“当代一休”小池龙之介治愈新作!附赠精美书签!)
》
售價:NT$
295.0
《
第二人生:找到重新定义人生的智慧
》
售價:NT$
440.0
《
唐朝三百年
》
售價:NT$
490.0
|
編輯推薦: |
本书力求将C++ STL所涉及问题一一列出并结合实例详细阐述,同时融入作者多年实践经验,目的只有一个:让读者做到快捷开发,少走弯路。
|
內容簡介: |
本书献给喜欢C++ STL的朋友,当您看见这本书时您应该对C++ STL已有一定的了解,希望继续深造;或者您已经暗下决心来学习它。那么本书将是您*的选择。如果您已经有了一些CC++基础,那么学习起来会更加轻松。
|
目錄:
|
第1章 类模板简介1.1 C++为什么需要模板功能 11.1.1 计算机实在是太傻了 11.1.2 类和函数重载部分解决了这个问题 21.1.3 泛型编程完美思路 21.1.4 C++的模板 31.1.5 C++ STL的渊源 31.2 C++基本概念通览 41.2.1 命名空间 41.2.2 头文件 51.2.3 面向对象的程序设计 61.2.4 C++中的声明和定义 81.2.5 最简单的C++程序 101.2.6 指针 121.2.7 函数 131.2.8 文件 171.2.9 程序的编译和链接 201.2.10 程序的启动和终止 211.2.11 异常处理 211.3 类模板定义 211.3.1 模板库(STL) 221.3.2 STL之父—Alexander Stepanov 221.3.3 类模板的英文原始定义 221.3.4 类模板实例化 221.3.5 类模板的成员函数 241.3.6 类模板的静态数据成员 241.4 成员模板 261.5 友元模板 271.6 函数模板 281.7 类模板的参数 311.7.1 关键字typename的使用 321.7.2 关键字typename与关键字class 331.8 模板库简介 341.8.1 C语言和STL的演变历史 341.8.2 STL的组件 341.8.3 STL的基本结构 351.8.4 STL的编程概述 381.8.5 学习重点提示 401.9 本章小结 40第2章 C++中的字符串2.1 字符串库简述 412.2 字符的特点 422.3 字符串类模板(basic_string模板类) 432.4 字符串操作的通用函数 442.4.1 构造器和析构器 452.4.2 大小和容量 462.4.3 元素存取(访问) 472.4.4 字符串比较 492.4.5 字符串内容修改和替换 512.4.6 字符串连接 572.4.7 字符串IO操作 572.4.8 字符串的搜索和查找 582.4.9 字符串对迭代器的支持 622.4.10 字符串对配置器的支持 632.5 本章小结 64第3章 容器3.1 容器的概念 653.1.1 容器成员和函数 653.1.2 容器的种类和数据结构 663.2 序列式容器概述 673.3 序列式容器——vector类模板 683.3.1 vector类基础 683.3.2 vector类的成员函数 723.3.3 vector高级编程 763.4 序列式容器——list类模板 843.4.1 list的定义和容量 853.4.2 list容器基础成员函数 903.4.3 运算符函数 943.4.4 其他重要成员函数 963.5 序列式容器——deque(双端队列)类模板 1023.5.1 容器deque和容器vector的对比 1023.5.2 容器deque的定义和容量 1033.5.3 deque容器基础成员函数 1043.5.4 deque容器的高级编程 1073.5.5 deque的模板函数 1093.6 关联式容器概述 1103.7 关联式容器——setmultiset类模板 1103.7.1 集合set的定义 1103.7.2 set和multiset的容量、搜寻和统计 1133.7.3 set和multiset的迭代器相关函数和赋值函数 1163.7.4 set和multiset的插入和移除 1183.7.5 set和multiset的比较运算符 1203.8 关联式容器——mapmultimap类模板 1213.8.1 map和multimap基础 1223.8.2 map和multimap成员函数 1263.8.3 map和multimap的高级编程 1283.9 特殊容器用法 1363.9.1 bitset类模板 1363.9.2 stack类模板 1393.9.3 队列queue类模板 1413.9.4 Priority Queues类模板 1443.10 本章小结 146第4章 C++中的算法4.1 算法库简介 1474.2 非修改性序列算法 1484.2.1 for each 算法 1484.2.2 元素计数算法 1524.2.3 最小值和最大值算法 1534.2.4 搜寻算法 1554.2.5 区间比较算法 1634.3 变动性算法 1674.3.1 复制 1674.3.2 转换 1694.3.3 互换 1734.3.4 赋值 1744.3.5 替换 1754.3.6 逆转 1764.3.7 旋转 1784.3.8 排列 1794.4 排序及相关操作 1834.4.1 全部元素排序 1834.4.2 局部排序 1854.4.3 根据某个元素排序 1874.4.4 堆(Heap)操作 1894.4.5 合并排序 1914.4.6 搜索 1944.5 删除算法 1964.6 本章小结 199第5章 迭代器(Iterator)5.1 迭代器及其特性 2005.2 头文件简述 2015.3 迭代器类型详述 2015.3.1 输入型迭代器 2015.3.2 输出型迭代器 2025.3.3 前向迭代器 2025.3.4 双向迭代器 2025.3.5 随机存取迭代器 2025.3.6 vector迭代器的递增和递减 2035.4 迭代器配接器 2035.4.1 逆向迭代器 2045.4.2 插入型迭代器 2055.4.3 流迭代器 2075.5 迭代器辅助函数 2105.5.1 advance迭代器前进函数 2105.5.2 distance迭代器距离 2115.5.3 iter_swap交换两个迭代器所指内容 2125.6 本章小结 213第6章 STL的数值计算6.1 复数运算 2146.1.1 最简单的复数运算例题 2146.1.2 复数成员函数 2156.1.3 复数运算符 2166.1.4 复数运算 2166.1.5 复数的超越函数 2186.2 数组(向量)运算 2216.2.1 类valarray 2216.2.2 数组子集类——slice类和类模板slice_array 2286.2.3 类gslice和类模板gslice_array 2306.2.4 类mask_array 2326.2.5 类indirect_array 2336.3 通用数值计算 2356.3.1 求和(accumulate) 2356.3.2 内积(inner_product) 2366.3.3 部分和(partial_sum) 2386.3.4 序列相邻差(adjacent_difference) 2396.4 全局性数学函数 2416.5 本章小结 243第7章 输入输出流7.1 IOStream简介 2447.1.1 Stream对象 2447.1.2 Stream类别 2457.1.3 Stream操作符 2467.1.4 操控器(Manipulators) 2467.2 IOStream 基本类和标准IOStream对象 2477.2.1 和IOStream类相关的头文件 2477.2.2 标准Stream操作符 2477.2.3 Stream状态 2517.2.4 标准输入和输出函数 2547.3 格式化 2597.3.1 格式标志 2597.3.2 bool类型数据的格式控制 2607.3.3 详解“字段宽度、充填字符和位置调整” 2617.3.4 正记号与大写字符 2637.3.5 数值进制 2647.3.6 浮点数输出 2667.3.7 一般性格式定义 2677.4 StreamBuffer类介绍 2687.4.1 Stream缓冲区 2687.4.2 缓冲区迭代器 2697.4.3 自定义缓冲区 2717.5 基于字符串的流 2777.5.1 streambuf类 2777.5.2 类模板basic_istringstream 2797.5.3 类模板basic_ostringstream 2797.5.4 类模板basic_stringstream 2807.6 基于文件的流 2807.6.1 文件标志及其使用 2817.6.2 随机存取 2907.6.3 4个类模板简介 2947.6.4 C库中的文件存取功能概述 2967.7 本章小结 298第8章 异常处理8.1 异常概念和基本思想 2998.1.1 异常的概念 2998.1.2 异常的分类 3008.1.3 异常的捕捉和处理 3028.1.4 资源管理 3048.1.5 异常和效率 3068.1.6 异常的描述 3078.1.7 未捕捉的异常 3098.2 异常类及几个重要问题 3118.2.1 类exception 3118.2.2 调用abort 3168.2.3 堆栈解退 3188.2.4 错误代码 3198.2.5 异常的迷失 3198.2.6 异常处理的局限性 3238.3 处理异常详述 3248.3.1 异常处理的实现机制 3258.3.2 异常处理语句的语法 3268.3.3 异常处理不唤醒 3268.3.4 函数声明 3268.3.5 使用异常 3268.4 异常的特殊处理函数 3278.5 本章小结 328第9章 通用工具9.1 通用工具库简介 3299.1.1 相等比较 3299.1.2 小于比较 3299.1.3 复制构造 3329.1.4 默认构造 3329.1.5 配置器要求 3329.1.6 运算符 3339.1.7 对组pairs 3349.2 动态内存管理 3399.2.1 默认配置器 3399.2.2 raw storage iterator 3419.2.3 temporary buffers(临时缓冲区) 3419.2.4 特定算法 3419.2.5 C函数库中的内存管理函数 3429.3 堆的内存分配 3439.3.1 new和delete运算符 3439.3.2 分配固定维数的数组 3439.3.3 分配动态内存数组 3449.3.4 处理堆耗尽 3459.4 辅助功能 3459.4.1 数值极限 3459.4.2 最大最小值(较大较小值) 3489.4.3 两值交换 3499.4.4 辅助性比较 3519.4.5 头文件cstdlib和cstddef简介 3529.5 日期和时间 3529.5.1 3个类型 3529.5.2 结构体tm 3539.5.3 相关时间函数 3539.5.4 时间示例 3569.6 模板类auto_ptr 3589.6.1 auto_ptr类构造函数 3599.6.2 类auto_ptr的成员及转换 3599.6.3 使用auto_ptr类 3609.7 本章小结 363第10章 语言支持10.1 类型 36410.2 执行属性 36410.2.1 类模板numeric_limits及其成员 36510.2.2 float_round_style和float_denorm_style 36710.2.3 数值极限的特化 36810.2.4 库函数 36810.2.5 应用举例 36910.3 程序的启动和终止 37610.4 动态内存管理 37610.4.1 内存的分配和释放 37710.4.2 内存分配错误 37910.4.3 应用举例 38010.5 类型标识符 38210.5.1 类type_info 38210.5.2 类bad_cast 38310.5.3 类bad_typeid 38410.5.4 操作符typeid 38410.5.5 操作符dynamic_cast 38510.5.6 应用举例 38510.6 异常处理 38710.6.1 异常类(class exception) 38710.6.2 violating exception-specifications 38810.6.3 abnormal termination 38910.6.4 未捕获异常(uncaught_exception) 39010.6.5 应用举例 39010.7 其他运行支持 39210.7.1 概述 39210.7.2 应用举例 39310.8 本章小结 396第11章 检测库详解11.1 异常类Exception 39711.1.1 类logic_error 39711.1.2 类domain_error 39811.1.3 类invalid_argument 39911.1.4 类length_error 40011.1.5 类out_of_range 40111.1.6 类runtime_error 40211.1.7 类range_error 40311.1.8 类overflow_error 40411.1.9 类underflow_error(下溢出) 40511.2 assertions(断言) 40611.3 错误编码 40811.4 本章小结 409第12章 国际化库详解12.1 国际化问题和国际化元素 41012.2 多种字符编码 41112.2.1 宽字符和多字节文本 41112.2.2 字符特性 41212.2.3 特殊字符国际化 41412.3 类locale 41412.3.1 类locale概述 41412.3.2 类locale的facet 41712.3.3 区域表示和混合区域表示 42012.3.4 流和区域 42312.3.5 刻面的处理 42412.4 标准locale的分类 42612.4.1 类ctype 42612.4.2 数值类的locale类 44012.4.3 刻面numeric punctuation 44712.4.4 类collate 44912.4.5 time类(category) 45112.4.6 C库locale 45712.5 本章小结 458第13章 仿函数13.1 仿函数的概述 45913.1.1 仿函数的概念 45913.1.2 仿函数的作用 46013.2 预定义仿函数 46713.3 辅助用仿函数 46813.3.1 一元组合函数配接器 46913.3.2 二元组合函数配接器 47113.4 关系仿函数 47213.4.1 等于(equal_to) 47213.4.2 不等于(not_equal_to) 47313.4.3 小于(less) 47413.4.4 大于(greater) 47513.4.5 大于等于(greater_equal)和小于等于(less_equal) 47513.5 逻辑仿函数 47613.5.1 谓词 47613.5.2 逻辑仿函数 47713.6 算术仿函数 48213.6.1 加减乘除运算仿函数(plus) 48213.6.2 “求余”仿函数和“求反”仿函数 48413.7 其他类型的仿函数 48513.7.1 证和映射 48613.7.2 仿函数hash和subtractive_rng 48913.8 适配器 48913.8.1 成员函数适配器 49013.8.2 其他适配器 49513.9 本章小结 504第14章 配置器14.1 使用配置器 50514.2 C++标准程序库的默认配置器(标准配置器) 50714.3 自定义配置器 50814.4 配置类的详细讨论 50914.4.1 型别 50914.4.2 配置类的成员函数 50914.4.3 广义配置器 51014.4.4 动态存储 51014.4.5 C风格的分配 51114.5 未初始化的内存 51114.6 配置器举例 51314.7 本章小结 514参考文献
|
內容試閱:
|
在开发语言中,C++的应用越来越广泛。而C++ STL是标准的C++模板库,是算法和其他一些标准组件的集合,可以说是世界上众多技术人员多年经验的总结。STL的目的是标准化组件,这样就不用重复开发,即可使用现成的组件,提高了开发效率。STL是C++标准的一部分,开发时不用额外安装插件包。编写一本全面的、透彻的C++ STL的书籍,有助于广大程序开发人员深入掌握C++ STL的编程技巧。从2003年10月15日,国际标准ISOIEC-14882 second edition颁布以来,已经过去了十多个年头。2011年夏天,笔者对目前的C++类书籍做了调研。除国外的翻译版本之外,国内出版的书籍少之又少,图书的质量良莠不齐。限于国外专家的书写习惯和翻译人员的水平,多数翻译版本表达不够准确。国内出版的多数书籍不能深刻地体现C++ STL的博大精深。国内的程序开发人员对C++和STL的学习和掌握,也停留在较低的水平。当我们打开C++或STL的函数声明或函数定义时,我们应该为C++语言专家的深邃思想和逻辑思维而折服。我们在学习使用C++ STL时,有时会深刻地认识到自身对计算机语言知识的匮乏,并且深刻地认识现代社会及未来社会中计算机语言的重要性。不管哪一种语言,其算法库的博大精深是毋庸置疑的。程序员在编程过程中只有充分利用这些算法库,才能发挥事半功倍的效果。当然每种算法库也有自己的局限性,遇到这种情况就需要程序员自己编写自定义的算法了。这里不再赘述,也许您现在已对C++ STL产生了浓厚的兴趣。那么尝试读一读本书,相信您会爱上本书。STL的发展和本书改版C++ STL是学好算法之后的关键学习点,本书配套我社《CC++常用算法手册》使用,可以在学习算法知识之后,来学习这套积累了程序员大牛智慧结晶的STL,可以应用在关键的算法和工作应用中。本次改版,我们主要把代码重新进行了调试,修改了上一版本书中因为匆忙而产生的代码小错误,并对全书所有实例的讲解意图进行了更加详细的说明。大规模重写了全书的第1章,让读者更加明白C++模板技术的起源和用途,明白C++ STL的重要性。让读者的学习台阶不再陡峭,读者学习了C++语言,结合CC++算法类图书,即可学习本书。本书适合的读者? 有一定的CC++语言基础,想从事C++程序较高层级开发的初学者;? 学习过C++语言,需要用C++做一定规模开发的读者;? 热爱CC++程序开发的所有读者。作者团队闫常友,高级工程师,电力系统及其自动化专业,九三学社社员,热爱计算机语言和软件开发,尤其对CC++系列有独到的见解和深厚的感情。王敏,高级工程师,电力系统及其自动化专业,长期从事CC++语言的开发和项目实践,经验丰富。致谢本书的编写是非常艰难的。首先作者对目前市场上现有的CC++书籍做了深入调研,利用了无数个夜晚,编写了所有的例题,并完成调试。感谢王敏女士编写了第1章的部分内容。感谢本书的修订者袁静静完成了本书的修订,这使得读者对C++的理解更加清晰,对本书的内容,也更加完善。其次,感谢负责本书的第一个审读者兼读者刘霞。她在写作过程中给予了我很多的鼓励和支持,使我得以写完本书。再次,还要感谢一下笔者对程序开发多年来的深深的热爱。笔者从1998年喜欢上CC++语言,目前已近不惑之年,把自己之前的一些想法和经验通过本书表达出来,也是值得庆幸的。
|
|