LT
 C++标准程序库:自修教程与参考手册(第2版)
 186.00
    - 出版社: 电子工业出版社; 第2版 (2015年6月1日)
  - 平装: 1128页
  - 开本: 16
  - ISBN: 9787121260896
  - 条形码: 9787121260896
  - 品牌: 电子工业出版社
  
  编辑推荐
    《C++标准库(第2版)》编辑推荐   
?8?5 “不熟悉 C++ 标准库,任何人都称不上是高效的 C++ 程序员。”——侯捷   
?8?5 C++11巨大革新,并已逐渐走向舞台中央,而其中变化最大的,正是标准库   
?8?5 STL容器、算法、迭代器光辉犹在,众多新组件争相登场——多么陌生的强大   
?8?5 新标准下C++标准库所有典型应用似乎都有不同,此大师原、译著威力正在于此   
?8?5 1100页鸿篇巨著,基于C++11重写全书示例代码,并针对旧标准程序员剖析实现差异   
?8?5 砂砾淘金,取精去芜,集委员会及C++社区智慧优选出程序员最常用新标准特性    
本书涵盖了所有全新的C++11标准库组件,包括:    
并发 分数运算 时钟和定时器 元组 新STL容器 新STL算法    
新智能指针 新locale facet 随机数和分布 Type traits和实用工具 正则表达式              
媒体推荐
    C++标准库提供了一组公共类和接口,极大地拓展了C++语言核心功能。然而,C++标准库并非不言自明。为了充分利用其组件,受益于其强大威力,真正能够满足你学习需要的参考资料绝不能仅仅列出那些类及其函数。    
《C++标准库(第2版)》对现已并入新版ANSI/ISO C++ 语言标准(C++11)的标准库做了描述。本书对于每个标准库组件都提供了综合的文档,包括:关于其设计目的和设计方法的概览;对于复杂概念的清晰解读;为了有效利用所需的实用编程细节;存在的一些陷阱;实际运用中最重要的类和函数的确切签名和定义;以及大量实用代码范例。本书尤其着眼于标准模板库(STL),介绍了容器、迭代器、函数对象以及STL算法。    
本书还介绍了标准库中的新式C++编程风格及其影响。其中包括lambda表达式、基于区间的for循环、move语义以及可变参数模板。              
目录
    第 2 版译序 xxi   
第 2 版序言 xxiii   
第 2 版致谢 xxiv   
第 1 版序言 xxv   
第 1 版致谢 xxvi   
1 关于本书 1   
1.1 缘起 1   
1.2 阅读前的必要基础 2   
1.3 本书风格与结构 2   
1.4 如何阅读本书 4   
1.5 目前发展情势 5   
1.6 范例代码及额外信息 5   
1.7 反馈 5   
2 C++ 及标准库简介 7   
2.1 C++ Standard 的历史 7   
2.1.1 C++11 Standard 常见疑问 8   
2.1.2 C++98 和 C++11 的兼容性 9   
2.2 复杂度与 Big-O 标记 10   
3 语言新特性 13   
3.1 C++11 语言新特性 13   
3.1.1 微小但重要的语法提升 13   
3.1.2 以auto完成类型自动推导 14   
3.1.3 一致性初始化(Uniform Initialization)与初值列(Initializer List) 15   
3.1.4 Range-Based for循环 17   
3.1.5 Move 语义和 Rvalue Reference 19   
3.1.6 新式的字符串字面常量(String Literal) 23   
3.1.7 关键字noexcept 24   
3.1.8 关键字constexpr 26   
3.1.9 崭新的 Template 特性 26   
3.1.10 Lambda 28   
3.1.11 关键字decltype 32   
3.1.12 新的函数声明语法(New Function Declaration Syntax) 32   
3.1.13 带领域的(Scoped) Enumeration 32   
3.1.14 新的基础类型(New Fundamental Data Type) 33   
3.2 虽旧犹新的语言特性 33   
3.2.1 基础类型的明确初始化(Explicit Initialization for Fundamental Type) 37   
3.2.2 main()定义式 37   
4 一般概念 39   
4.1 命名空间(Namespace)std 39   
4.2 头文件(Header File) 40   
4.3 差错和异常(Error and Exception)的处理 41   
4.3.1 标准的 Exception Class(异常类) 41   
4.3.2 异常类(Exception Class)的成员 44   
4.3.3 以 Class exception_ptr传递异常 52   
4.3.4 抛出标准异常 53   
4.3.5 自标准异常类派生 54   
4.4 Callable Object(可被调用的对象) 54   
4.5 并发与多线程 55   
4.6 分配器(Allocator) 57   
5 通用工具 59   
5.1 Pair 和 Tuple 60   
5.1.1 Pair 60   
5.1.2 Tuple(不定数的值组) 68   
5.1.3 Tuple 的输入/输出 74   
5.1.4 tuple和pair转换 75   
5.2 Smart Pointer(智能指针) 76   
5.2.1 Class shared_ptr 76   
5.2.2 Class weak_ptr 84   
5.2.3 误用 Shared Pointer 89   
5.2.4 细究 Shared Pointer 和 Weak Pointer 92   
5.2.5 Class unique_ptr 98   
5.2.6 细究 Class unique_ptr 110   
5.2.7 Class auto_ptr 113   
5.2.8 Smart Pointer 结语 114   
5.3 数值的极值(Numeric Limit) 115   
5.4 Type Trait 和 Type Utility 122   
5.4.1 Type Trait 的目的 122   
5.4.2 细究 Type Trait 125   
5.4.3 Reference Wrapper(外覆器) 132   
5.4.4 Function Type Wrapper(外覆器) 133   
5.5 辅助函数 134   
5.5.1 挑选最小值和最大值 134   
5.5.2 两值互换(Swapping) 136   
5.5.3 增补的“比较操作符”(Comparison Operator) 138   
5.6 Class ratio<>的编译期分数运算 140   
5.7 Clock 和 Timer 143   
5.7.1 Chrono 程序库概观 143   
5.7.2 Duration(时间段) 144   
5.7.3 Clock(时钟)和 Timepoint(时间点) 149   
5.7.4 C 和 POSIX 提供的 Date/Time 函数 157   
5.7.5 以计时器停滞线程(Blocking with Timer) 160   
5.8 头文件<cstddef>、<cstdlib>和<cstring> 161   
5.8.1 <cstddef>内的各项定义 161   
5.8.2 <cstdlib>内的各种定义 162   
5.8.3 <cstring>中的定义式 163   
6 标准模板库 165   
6.1 STL 组件(Component) 165   
6.2 容器(Container) 167   
6.2.1 序列式容器(Sequence Container) 169   
6.2.2 关联式容器(Associative Container) 177   
6.2.3 无序容器(Unordered Container) 180   
6.2.4 关联式数组(Associative Array) 185   
6.2.5 其他容器 187   
6.2.6 容器适配器(Container Adapter) 188   
6.3 迭代器(Iterator) 188   
6.3.1 关联式( Associative )及无序( Unordered )容器的更多实例 193   
6.3.2 迭代器种类(Iterator Category) 198   
6.4 算法(Algorithm) 199   
6.4.1 区间(Range) 203   
6.4.2 处理多重区间(Multiple Ranges) 207   
6.5 迭代器之适配器(Iterator Adapter) 210   
6.5.1 Insert Iterator(安插型迭代器) 210   
6.5.2 Stream Iterator(串流迭代器) 212   
6.5.3 Reverse Iterator(反向迭代器) 214   
6.5.4 Move Iterator(搬移迭代器) 216   
6.6 用户自定义的泛型函数(User-Defined Generic Function) 216   
6.7 更易型算法(Manipulating Algorithm) 217   
6.7.1 移除(Removing)元素 218   
6.7.2 更易 Associative(关联式)和 Unordered(无序)容器 221   
6.7.3 算法 vs. 成员函数 223   
6.8 以函数作为算法的实参 224   
6.8.1 以函数作为算法实参的实例示范 224   
6.8.2 判断式(Predicate) 226   
6.9 使用 Lambda 229   
6.10 函数对象(Function Object) 233   
6.10.1 定义一个函数对象 233   
6.10.2 预定义的函数对象 239   
6.10.3 Binder 241   
6.10.4 函数对象 vs. Lambda 243   
6.11 容器内的元素 244   
6.11.1 容器元素的必要条件 244   
6.11.2 Value 语义 vs. Reference 语义 245   
6.12 STL 内部的错误和异常 245   
6.12.1 错误处理(Error Handling) 246   
6.12.2 异常处理(Exception Handling) 248   
6.13 扩展 STL 250   
6.13.1 整合更多 Type 250   
6.13.2 派生自 STL Type 251   
7 STL 容器 253   
7.1 容器的共通能力和共通操作 254   
7.1.1 容器的共通能力 254   
7.1.2 容器的共通操作 254   
7.1.3 容器提供的类型 260   
7.2 Array 261   
7.2.1 Array 的能力 261   
7.2.2 Array 的操作 263   
7.2.3 把array当成 C-Style Array 267   
7.2.4 异常处理( Exception Handling ) 268   
7.2.5 Tuple 接口 268   
7.2.6 Array 运用实例 268   
7.3 Vector 270   
7.3.1 Vector 的能力 270   
7.3.2 Vector 的操作 273   
7.3.3 将 Vector 当作 C-Style Array 使用 278   
7.3.4 异常处理( Exception Handling ) 278   
7.3.5 Vector 使用实例 279   
7.3.6 Class vector<bool> 281   
7.4 Deque 283   
7.4.1 Deque 的能力 284   
7.4.2 Deque 的操作函数 284   
7.4.3 Exception Handling 288   
7.4.4 Deque 运用实例 288   
7.5 List 290   
7.5.1 List 的能力 290   
7.5.2 List 的操作 291   
7.5.3 异常处理( Exception Handling ) 296   
7.5.4 List 运用实例 298   
7.6 Forward List 300   
7.6.1 Forward List 的能力 300   
7.6.2 Forward List 的操作 302   
7.6.3 异常处理( Exception Handling ) 311   
7.6.4 Forward List 运用实例 312   
7.7 Set 和 Multiset 314   
7.7.1 Set 和 Multiset 的能力 315   
7.7.2 Set and Multiset 的操作函数 316   
7.7.3 异常处理( Exception Handling ) 325   
7.7.4 Set 和 Multiset 运用实例 325   
7.7.5 运行期指定排序准则 328   
7.8 Map 和 Multimap 331   
7.8.1 Map 和 Multimap 的能力 332   
7.8.2 Map 和 Multimap 的操作函数 333   
7.8.3 将 Map 视为关联式数组( Associative Array ) 343   
7.8.4 异常处理( Exception Handling ) 345   
7.8.5 Map 和 Multimap 运用实例 345   
7.8.6 综合实例:运用 Map、 String 并于运行期指定排序准则 351   
7.9 无序容器( Unordered Container ) 355   
7.9.1 Unordered 容器的能力 357   
7.9.2 创建和控制 Unordered 容器 359   
7.9.3 Unordered 容器的其他操作 367   
7.9.4 Bucket 接口 374   
7.9.5 使用 Unordered Map 作为 Associative Array 374   
7.9.6 异常处理( Exception Handling ) 375   
7.9.7 Unordered 容器的运用实例 375   
7.10 其他 STL 容器 385   
7.10.1 String 作为一种 STL 容器 385   
7.10.2 C-Style Array 作为一种 STL 容器 386   
7.11 实现 Reference 语义 388   
7.12 各种容器的使用时机 392   
8 细探 STL 容器成员 397   
8.1 容器内的类型 397   
8.2 创建、复制和销毁( Create, Copy, and Destroy ) 400   
8.3 非更易型操作( Nonmodifying Operation ) 403   
8.3.1 大小相关操作( Size Operation ) 403   
8.3.2 元素比较( Comparison Operation ) 404   
8.3.3 Associative 和 Unordered 容器特有的非更易型操作 404   
8.4 赋值( Assignment ) 406   
8.5 元素直接访问( Direct Element Access ) 408   
8.6 “产出迭代器”之各项操作 410   
8.7 安插和移除( Inserting and Removing )元素 411   
8.7.1 安插单一元素( Inserting Single Element ) 411   
8.7.2 安插多重元素( Inserting Multiple Elements ) 416   
8.7.3 移除元素( Removing Element ) 417   
8.7.4 重设大小( Resizing ) 420   
8.8 List 和 Forward List 的特殊成员函数 420   
8.8.1 特殊成员函数(针对 List 和 Forward List ) 420   
8.8.2 特殊成员函数(只针对 Forward List ) 423   
8.9 容器的策略接口( Policy Interface ) 427   
8.9.1 非更易型策略函数( Nonmodifying Policy Function ) 427   
8.9.2 更易型策略函数( Modifying Policy Function ) 428   
8.9.3 Unordered 容器的 Bucket 相关接口 429   
8.10 对分配器( Allocator )的支持 430   
8.10.1 基本的分配器成员( Fundamental Allocator Member ) 430   
8.10.2 带有“可选之分配器参数”的构造函数 430   
9 STL 迭代器 433   
9.1 迭代器头文件( Header Files for Iterators ) 433   
9.2 迭代器种类( Iterator Category ) 433   
9.2.1 Output 迭代器 433   
9.2.2 Input 迭代器 435   
9.2.3 Forward(前向)迭代器 436   
9.2.4 Bidirectional(双向)迭代器 437   
9.2.5 Random-Access(随机访问)迭代器 438   
9.2.6 Vector 迭代器的递增( Increment )和递减( Decrement ) 440   
9.3 迭代器相关辅助函数 441   
9.3.1 advance() 441  
				
 
				
				
					精通现代 C++:高效、安全、富有表现力的编程实践  C++ 语言,作为一门强大且 versatile 的编程语言,在软件开发的各个领域扮演着至关重要的角色,从系统底层到高性能计算,再到游戏开发和嵌入式系统,无处不见其身影。随着 C++ 标准的不断演进,特别是 C++11 及其后续标准的推出,这门语言的表达能力、安全性和效率得到了极大的提升,也为开发者带来了更加现代化、更富有生产力的编程范式。  本书并非一本简单的 C++ 语法入门手册,而是旨在带领读者深入探索 C++ 标准程序库(Standard Library)的精髓,并在此基础上,结合 C++11 及之后现代 C++ 标准的特性,构建一套高效、安全、富有表现力的编程实践体系。我们将聚焦于如何充分利用标准库提供的丰富工具,来解决实际开发中遇到的各种挑战,并学会编写更加简洁、易于维护、性能卓越的代码。  核心主题与内容梗概:  本书将围绕以下几个核心主题展开,通过理论讲解、大量实例演示和实操练习,帮助读者全面掌握现代 C++ 编程的要义:  第一部分:现代 C++ 基础与工具链     C++11 标准的革命性进步: 我们将首先回顾 C++11 标准带来的关键性更新,包括但不限于:        自动类型推导(`auto`): 简化变量声明,提升代码可读性。        范围 for 循环(Range-based for loop): 优雅地遍历容器元素,告别手动迭代器管理。        初始化列表(Initializer lists): 统一的初始化语法,使代码更加一致。        智能指针(Smart pointers): `std::unique_ptr`, `std::shared_ptr`, `std::weak_ptr`,彻底解决手动内存管理的痛点,显著提升内存安全。        右值引用与移动语义(Rvalue references and move semantics): 优化对象拷贝,提升性能,尤其对于大型数据结构。        lambda 表达式: 简洁的匿名函数,极大地增强了函数式编程能力,使得算法的使用更加灵活。        并发编程支持: `std::thread`, `std::mutex`, `std::atomic` 等,为多线程编程提供了标准化的工具。        类型特征(Type traits)与编译期计算: 允许在编译期获取和操作类型信息,实现更高级的代码元编程。    高效的工具链配置与使用: 掌握现代 C++ 开发离不开强大的工具。我们将探讨如何配置和使用主流的 C++ 编译器(如 GCC, Clang, MSVC),理解编译、链接的过程,以及如何利用调试器(如 GDB, LLDB)进行有效的故障排查。此外,还会介绍构建系统(如 CMake)的重要性,帮助读者管理复杂的项目结构。  第二部分:C++ 标准程序库的深度探索  C++ 标准程序库是 C++ 语言不可分割的一部分,它提供了大量预定义类和函数,涵盖了数据结构、算法、输入/输出、字符串处理、并发等方方面面。本书将对标准库的关键组件进行深入剖析:     容器(Containers):        序列容器: `std::vector`, `std::list`, `std::deque`, `std::forward_list`。深入理解它们的内部实现机制、时间复杂度、适用场景,以及如何通过智能指针和范围 for 循环高效地管理和操作它们。        关联容器: `std::map`, `std::set`, `std::unordered_map`, `std::unordered_set`。学习它们的查找、插入、删除操作的效率,以及如何使用自定义比较器和哈希函数来定制它们的行为。        容器适配器: `std::stack`, `std::queue`, `std::priority_queue`。理解它们如何基于其他容器实现,并掌握它们的典型应用。    算法(Algorithms):        通用算法: `std::sort`, `std::find`, `std::transform`, `std::accumulate`, `std::for_each`, `std::copy` 等。学习这些算法的强大功能,理解它们的迭代器接口,并学会如何结合 lambda 表达式来编写高度定制化的算法调用。        数值算法: `std::inner_product`, `std::partial_sum` 等。        排序与查找算法: `std::lower_bound`, `std::upper_bound`, `std::binary_search` 等。        STL 算法的性能优化: 探讨算法的内部实现,以及如何通过选择合适的算法和数据结构来达到最佳性能。    迭代器(Iterators): 迭代器是连接容器和算法的桥梁。我们将深入理解不同类型的迭代器(输入、输出、前向、双向、随机访问),以及它们在算法中的作用。    字符串与字符处理: `std::string` 的高效用法,以及 `std::stringstream` 在字符串与各种数据类型之间的转换。    输入/输出流(I/O Streams): `std::cin`, `std::cout`, `std::fstream`。学习格式化输出、错误处理,以及如何利用流进行文件操作。    时间与日期: `chrono` 库提供的时间点、时长和时间日历的强大功能,用于精确计时和日期计算。    内存管理: 除了智能指针,还将探讨 `std::allocator` 的概念,以及如何在需要时进行自定义内存分配。    异常处理: 标准异常类(如 `std::exception`, `std::runtime_error`)的使用,以及如何编写健壮的异常处理代码。  第三部分:现代 C++ 编程范式与设计模式  掌握了标准库的工具,我们将进一步提升编程的艺术性与效率:     面向对象编程(OOP)在现代 C++ 中的应用: 结合标准库,编写更精炼的类,利用封装、继承和多态的优势。    函数式编程风格: 充分利用 lambda 表达式、算法和 STL 容器,编写更声明式、更易于推理的代码。    泛型编程(Generic Programming): 模板元编程(Template Metaprogramming)和 Concepts(C++20 及以后),实现代码的重用性和灵活性。    RAII(Resource Acquisition Is Initialization): 利用对象的生命周期来管理资源,是 C++ 中编写安全代码的核心原则,我们将通过智能指针和自定义类进行详细演示。    设计模式的现代 C++ 实现: 结合标准库,用 C++ 的方式优雅地实现常见的设计模式,如工厂模式、单例模式、观察者模式等。    并发编程实践: 利用 `std::thread`, `std::mutex`, `std::condition_variable`, `std::async` 等,编写安全高效的多线程程序,理解数据竞争、死锁等问题,并学习如何避免。    性能优化策略: 从算法选择、数据结构设计到编译器优化,提供全面的性能提升思路。  本书特色:     以问题为导向: 每一个知识点都将围绕解决实际编程问题展开,让读者理解“为什么”以及“如何做”。    大量代码示例: 每一个概念都配有清晰、可运行的代码示例,帮助读者直观理解。    实践性强: 强调动手实践,鼓励读者通过练习巩固所学知识。    紧跟标准: 聚焦 C++11 及之后现代 C++ 标准的核心特性,为读者打下坚实的基础。    深入浅出: 循序渐进,从基础到高级,逐步引导读者掌握复杂的 C++ 概念。  目标读者:     有一定 C++ 基础,但希望提升至现代 C++ 水平的开发者。    希望深入理解 C++ 标准程序库,并将其应用于实际开发的程序员。    对编写高效、安全、可维护的 C++ 代码有强烈需求的软件工程师。    学习 C++ 11 及之后新特性的学生或自学者。  通过学习本书,您将能够更自信地驾驭 C++ 语言,编写出更具表现力、更健壮、更高效的程序。本书将成为您在现代 C++ 编程道路上不可或缺的得力助手。