【MySQL 5.7 Reference Manual】15.4.3 Adaptive Hash Index(自适应哈希索引)

15.4.3 Adaptive Hash Index (自适应哈希索引)

The adaptive hash index (AHI) lets InnoDB perform more like an in-memory database on systems with appropriate combinations of workload and ample memory for the buffer pool, without sacrificing any transactional features or reliability. This feature is enabled by the innodb_adaptive_hash_index option, or turned off by --skip-innodb_adaptive_hash_index at server startup.

自适应哈希索引(AHI)使InnoDB平台看起来更像一个内存数据库(在系统负载适当并且分配给缓存池的 内存 充裕的情况下),且不牺牲任何事务特性或可靠性。这个特性可以在服务启动时通过innodb_adaptive_hash_index选项生效,或者通过--skip-innodb_adaptive_hash_index关闭。

Based on the observed pattern of searches, MySQL builds a hash index using a prefix of the index key. The prefix of the key can be any length, and it may be that only some of the values in the B-tree appear in the hash index. Hash indexes are built on demand for those pages of the index that are often accessed.

根据所观察到的的搜索模式,MySQL用一个索引键的前缀建立一个哈希索引。该键的前缀可以是任意长度,并且只有B-tree中的少数值才会出现在哈希索引中。哈希索引是为了获取那些被频繁访问的索引页而建立的。

If a table fits almost entirely in main memory, a hash index can speed up queries by enabling direct lookup of any element, turning the index value into a sort of pointer. InnoDB has a mechanism that monitors index searches. If InnoDB notices that queries could benefit from building a hash index, it does so automatically.

如果一张表几乎整个被至于主内存中,那么有了哈希索引就可以直接查找任意元素并将其索引值转换为一系列的指针从而提升查询速度。InnoDB有一个机制可以监控索引的搜索。如果InnoDB注意到查询可以通过建立哈希索引得到优化,那么他就会自动做这件事。

With some workloads, the speedup from hash index lookups greatly outweighs the extra work to monitor index lookups and maintain the hash index structure. Sometimes, the read/write lock that guards access to the adaptive hash index can become a source of contention under heavy workloads, such as multiple concurrent joins. Queries with LIKE operators and % wildcards also tend not to benefit from the AHI. For workloads where the adaptive hash index is not needed, turning it off reduces unnecessary performance overhead. Because it is difficult to predict in advance whether this feature is appropriate for a particular system, consider running benchmarks with it both enabled and disabled, using a realistic workload. The architectural changes in MySQL 5.6 and higher make more workloads suitable for disabling the adaptive hash index than in earlier releases, although it is still enabled by default.

只需增加少量负载,这种由于哈希索引查询所带来的速度提升大大超过监控索引查询和维护哈希索引结构的所带来的额外工作量。有时,在高负载的情况下守护自适应哈希索引访问的读写锁会变成一种竞争资源,例如多重并发关联。基于LIKE操作和%通配符的查询也往往不通过AHI来优化。对于自适应哈希索引所不需要的负载,关闭它以节省不必要的性能开销。由于难以提前预测该特性是否适用于某一特定系统,需要在实际负载下,识别在其启用和禁用时的运行指标。该架构在MySQL 5.6及以上版本中改变, 相比之前的版本, 禁用自适应哈希索引会适当的产生更多的负载。

As of MySQL 5.7.8, the adaptive hash index search system is partitioned. Each index is bound to a specific partition, and each partition is protected by a separate latch. Partitioning is controlled by the innodb_adaptive_hash_index_parts configuration option. Prior to MySQL 5.7.8, the adaptive hash index search system was protected by a single latch which could become a point of contention under heavy workloads. The innodb_adaptive_hash_index_parts option is set to 8 by default. The maximum setting is 512.

从MySQL 5.7.8开始,自适应哈希索引搜索系统是分区的。每个索引都会绑定到一个特殊的分区上,并且每个分区都由各自独立的锁存器来保护。分区受到innodb_adaptive_hash_index_parts配置项的控制。在MySQL5.7.8之前,自适应哈希索引搜索系统是通过一个单独的锁存器来保护,在高负载的情况下它会变成竞争点。innodb_adaptive_hash_index_parts选项默认值为8,最大值为512。

The hash index is always built based on an existing B-tree index on the table. InnoDB can build a hash index on a prefix of any length of the key defined for the B-tree, depending on the pattern of searches that InnoDB observes for the B-tree index. A hash index can be partial, covering only those pages of the index that are often accessed.

哈希索引的建立总是基于表上的一个现有的B-tree索引。InnoDB可以用任意长度的B-tree键的前缀建索引,依赖于InnoDB从B-tree索引上所观察到的搜索模式。哈希索引可以是局部的,仅覆盖哪些经常被访问的索引页。

You can monitor the use of the adaptive hash index and the contention for its use in the SEMAPHORES section of the output of the SHOW ENGINE INNODB STATUS command. If you see many threads waiting on an RW-latch created in btr0sea.c, then it might be useful to disable adaptive hash indexing.

你可以通过SHOW ENGINE INNODB STATUS命令所输出的SEMAPHORES部分来监控自适应哈希索引的使用及其竞争情况。如果你看到许多线程正在等待一个在btr0sea.c中创建的RW-latch,然后它可能被用于禁用自适应哈希索引。

For more information about the performance characteristics of hash indexes, see Section 9.3.8, “Comparison of B-Tree and Hash Indexes”.

更多信息关于哈希索引的性能特性,请参考9.3.8,“B-Tree和哈希索引的竞争”。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F10xxx rev7v3参考手册. 南京万利提供的原始翻译文档. 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本. 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 目录 1 文中的缩写 16 1.1 寄存器描述表中使用的缩写列表 16 1.2 术语表 16 1.3 可用的外设 16 2 存储器和总线构架 17 2.1 系统构架 17 2.2 存储器组织 18 2.3 存储器映像 19 2.3.1 嵌入式SRAM 20 2.3.2 位段 20 2.3.3 嵌入式闪存 21 2.4 启动配置 23 3 CRC计算单元(CRC) 25 3.1 CRC简介 25 3.2 CRC主要特性 25 3.3 CRC功能描述 25 3.4 CRC寄存器 26 3.4.1 数据寄存器(CRC_DR) 26 3.4.2 独立数据寄存器(CRC_IDR) 26 3.4.3 控制寄存器(CRC_CR) 27 3.4.4 CRC寄存器映像 27 4 电源控制(PWR) 28 4.1 电源 28 4.1.1 独立的A/D转换器供电和参考电压 28 4.1.2 电池备份区域 29 4.1.3 电压调节器 29 4.2 电源管理器 29 4.2.1 上电复位(POR)和掉电复位(PDR) 29 4.2.2 可编程电压监测器(PVD) 30 4.3 低功耗模式 30 4.3.1 降低系统时钟 31 4.3.2 外部时钟的控制 31 4.3.3 睡眠模式 31 4.3.4 停止模式 32 4.3.5 待机模式 33 4.3.6 低功耗模式下的自动唤醒(AWU) 34 4.4 电源控制寄存器 35 4.4.1 电源控制寄存器(PWR_CR) 35 4.4.2 电源控制/状态寄存器 36 4.4.3 PWR寄存器地址映像 37 5 备份寄存器(BKP) 38 5.1 BKP简介 38 5.2 BKP特性 38 目录 STM32F10xxx参考手册 3/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 5.3 BKP功能描述 38 5.3.1 侵入检测 38 5.3.2 RTC校准 39 5.4 BKP寄存器描述 39 5.4.1 备份数据寄存器x(BKP_DRx) (x = 1 … 10) 39 5.4.2 RTC时钟校准寄存器(BKP_RTCCR) 39 5.4.3 备份控制寄存器(BKP_CR) 40 5.4.4 备份控制/状态寄存器(BKP_CSR) 40 5.4.5 BKP寄存器映像 42 6 复位和时钟控制(RCC) 45 6.1 复位 45 6.1.1 系统复位 45 6.1.2 电源复位 45 6.1.3 备份域复位 46 6.2 时钟 46 6.2.1 HSE时钟 48 6.2.2 HSI时钟 48 6.2.3 PLL 49 6.2.4 LSE时钟 49 6.2.5 LSI时钟 49 6.2.6 系统时钟(SYSCLK)选择 50 6.2.7 时钟安全系统(CSS) 50 6.2.8 RTC时钟 50 6.2.9 看门狗时钟 50 6.2.10 时钟输出 50 6.3 RCC寄存器描述 51 6.3.1 时钟控制寄存器(RCC_CR) 51 6.3.2 时钟配置寄存器(RCC_CFGR) 52 6.3.3 时钟中断寄存器 (RCC_CIR) 54 6.3.4 APB2外设复位寄存器 (RCC_APB2RSTR) 56 6.3.5 APB1外设复位寄存器 (RCC_APB1RSTR) 58 6.3.6 AHB外设时钟使能寄存器 (RCC_AHBENR) 60 6.3.7 APB2外设时钟使能寄存器(RCC_APB2ENR) 61 6.3.8 APB1外设时钟使能寄存器(RCC_APB1ENR) 62 6.3.9 备份域控制寄存器 (RCC_BDCR) 65 6.3.10 控制/状态寄存器 (RCC_CSR) 66 6.3.11 RCC寄存器地址映像 68 7 通用和复用功能I/O(GPIO和AFIO) 69 7.1 GPIO功能描述 69 7.1.1 通用I/O(GPIO) 70 7.1.2 单独的位设置或位清除 71 7.1.3 外部中断/唤醒线 71 7.1.4 复用功能(AF) 71 7.1.5 软件重新映射I/O复用功能 71 7.1.6 GPIO锁定机制 71 7.1.7 输入配置 71 7.1.8 输出配置 72 7.1.9 复用功能配置 73 7.1.10 模拟输入配置 73 目录 STM32F10xxx参考手册 4/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 7.2 GPIO寄存器描述 75 7.2.1 端口配置低寄存器(GPIOx_CRL) (x=A..E) 75 7.2.2 端口配置高寄存器(GPIOx_CRH) (x=A..E) 75 7.2.3 端口输入数据寄存器(GPIOx_IDR) (x=A..E) 76 7.2.4 端口输出数据寄存器(GPIOx_ODR) (x=A..E) 76 7.2.5 端口位设置/清除寄存器(GPIOx_BSRR) (x=A..E) 77 7.2.6 端口位清除寄存器(GPIOx_BRR) (x=A..E) 77 7.2.7 端口配置锁定寄存器(GPIOx_LCKR) (x=A..E) 77 7.3 复用功能I/O和调试配置(AFIO) 78 7.3.1 把OSC32_IN/OSC32_OUT作为GPIO 端口PC14/PC15 78 7.3.2 把OSC_IN/OSC_OUT引脚作为GPIO端口PD0/PD1 78 7.3.3 CAN复用功能重映射 79 7.3.4 JTAG/SWD复用功能重映射 79 7.3.5 ADC复用功能重映射 80 7.3.6 定时器复用功能重映射 80 7.3.7 USART复用功能重映射 81 7.3.8 I2C 1 复用功能重映射 82 7.3.9 SPI 1复用功能重映射 82 7.4 AFIO寄存器描述 83 7.4.1 事件控制寄存器(AFIO_EVCR) 83 7.4.2 复用重映射和调试I/O配置寄存器(AFIO_MAPR) 83 7.4.3 外部中断配置寄存器1(AFIO_EXTICR1) 86 7.4.4 外部中断配置寄存器2(AFIO_EXTICR2) 86 7.4.5 外部中断配置寄存器3(AFIO_EXTICR3) 87 7.4.6 外部中断配置寄存器4(AFIO_EXTICR4) 87 7.5 GPIO 和AFIO寄存器地址映象 88 8 中断和事件 89 8.1 嵌套向量中断控制器 89 8.1.1 系统嘀嗒(SysTick)校准值寄存器 89 8.1.2 中断和异常向量 89 8.2 外部中断/事件控制器(EXTI) 91 8.2.1 主要特性 91 8.2.2 框图 92 8.2.3 唤醒事件管理 92 8.2.4 功能说明 92 8.2.5 外部中断/事件线路映像 94 8.3 EXTI 寄存器描述 95 8.3.1 中断屏蔽寄存器(EXTI_IMR) 95 8.3.2 事件屏蔽寄存器(EXTI_EMR) 95 8.3.3 上升沿触发选择寄存器(EXTI_RTSR) 96 8.3.4 下降沿触发选择寄存器(EXTI_FTSR) 96 8.3.5 软件中断事件寄存器(EXTI_SWIER) 97 8.3.6 挂起寄存器(EXTI_PR) 97 8.3.7 外部中断/事件寄存器映像 98 9 DMA 控制器(DMA) 99 9.1 DMA简介 99 9.2 DMA主要特性 99 9.3 功能描述 100 目录 STM32F10xxx参考手册 5/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 9.3.1 DMA处理 100 9.3.2 仲裁器 100 9.3.3 DMA 通道 101 9.3.4 可编程的数据传输宽度,对齐方式和数据大小端 102 9.3.5 错误管理 103 9.3.6 中断 103 9.3.7 DMA请求映像 104 9.4 DMA寄存器 107 9.4.1 DMA中断状态寄存器(DMA_ISR) 107 9.4.2 DMA中断标志清除寄存器(DMA_IFCR) 108 9.4.3 DMA通道x配置寄存器(DMA_CCRx)(x = 1…7) 108 9.4.4 DMA通道x传输数量寄存器(DMA_CNDTRx)(x = 1…7) 110 9.4.5 DMA通道x外设地址寄存器(DMA_CPARx)(x = 1…7) 110 9.4.6 DMA通道x存储器地址寄存器(DMA_CPARx)(x = 1…7) 110 9.4.7 DMA寄存器映像 111 10 模拟/数字转换(ADC) 113 10.1 ADC介绍 113 10.2 ADC主要特征 113 10.3 ADC功能描述 114 10.3.1 ADC开关控制 115 10.3.2 ADC时钟 115 10.3.3 通道选择 115 10.3.4 单次转换模式 115 10.3.5 连续转换模式 116 10.3.6 时序图 116 10.3.7 模拟看门狗 116 10.3.8 扫描模式 117 10.3.9 注入通道管理 117 10.3.10 间断模式 118 10.4 校准 119 10.5 数据对齐 119 10.6 可编程的通道采样时间 120 10.7 外部触发转换 120 10.8 DMA请求 121 10.9 双ADC模式 121 10.9.1 同步注入模式 122 10.9.2 同步规则模式 123 10.9.3 快速交替模式 123 10.9.4 慢速交替模式 124 10.9.5 交替触发模式 124 10.9.6 独立模式 125 10.9.7 混合的规则/注入同步模式 125 10.9.8 混合的同步规则+交替触发模式 125 10.9.9 混合同步注入+交替模式 126 10.10 温度传感器 126 10.11 ADC中断 127 10.12 ADC寄存器描述 128 10.12.1 ADC状态寄存器(ADC_SR) 128 目录 STM32F10xxx参考手册 6/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 10.12.2 ADC控制寄存器1(ADC_CR1) 129 10.12.3 ADC控制寄存器2(ADC_CR2) 131 10.12.4 ADC采样时间寄存器1(ADC_SMPR1) 133 10.12.5 ADC采样时间寄存器2(ADC_SMPR2) 133 10.12.6 ADC注入通道数据偏移寄存器x (ADC_JOFRx)(x=1..4) 134 10.12.7 ADC看门狗高阀值寄存器(ADC_HTR) 134 10.12.8 ADC看门狗低阀值寄存器(ADC_LRT) 134 10.12.9 ADC规则序列寄存器1(ADC_SQR1) 135 10.12.10 ADC规则序列寄存器2(ADC_SQR2) 135 10.12.11 ADC规则序列寄存器3(ADC_SQR3) 136 10.12.12 ADC注入序列寄存器(ADC_JSQR) 136 10.12.13 ADC 注入数据寄存器x (ADC_JDRx) (x= 1..4) 137 10.12.14 ADC规则数据寄存器(ADC_DR) 137 10.12.15 ADC寄存器地址映像 138 11 数字/模拟转换(DAC) 140 11.1 DAC简介 140 11.2 DAC主要特征 140 11.3 DAC功能描述 141 11.3.1 使能DAC通道 141 11.3.2 使能DAC输出缓存 141 11.3.3 DAC数据格式 142 11.3.4 DAC转换 142 11.3.5 DAC输出电压 143 11.3.6 选择DAC触发 143 11.3.7 DMA请求 144 11.3.8 噪声生成 144 11.3.9 三角波生成 145 11.4 双DAC通道转换 145 11.4.1 无波形生成的独立触发 145 11.4.2 带相同LFSR生成的独立触发 146 11.4.3 带不同LFSR生成的独立触发 146 11.4.4 带相同三角波生成的独立触发 146 11.4.5 带不同三角波生成的独立触发 146 11.4.6 同时软件启动 147 11.4.7 不带波形生成的同时触发 147 11.4.8 带相同LFSR生成的同时触发 147 11.4.9 带不同LFSR生成的同时触发 147 11.4.10 带相同三角波生成的同时触发 147 11.4.11 带不同三角波生成的同时触发 148 11.5 DAC寄存器 149 11.5.1 DAC控制寄存器(DAC_CR) 149 11.5.2 DAC软件触发寄存器(DAC_SWTRIGR) 151 11.5.3 DAC通道1的12位右对齐数据保持寄存器(DAC_DHR12R1) 152 11.5.4 DAC通道1的12位左对齐数据保持寄存器(DAC_DHR12L1) 152 11.5.5 DAC通道1的8位右对齐数据保持寄存器(DAC_DHR8R1) 152 11.5.6 DAC通道2的12位右对齐数据保持寄存器(DAC_DHR12R2) 153 11.5.7 DAC通道2的12位左对齐数据保持寄存器(DAC_DHR12L2) 153 11.5.8 DAC通道2的8位右对齐数据保持寄存器(DAC_DHR8R2) 153 11.5.9 双DAC的12位右对齐数据保持寄存器(DAC_DHR12RD) 154 11.5.10 双DAC的12位左对齐数据保持寄存器(DAC_DHR12LD) 154 目录 STM32F10xxx参考手册 7/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 11.5.11 双DAC的8位右对齐数据保持寄存器(DAC_DHR8RD) 154 11.5.12 DAC通道1数据输出寄存器(DAC_DOR1) 155 11.5.13 DAC通道2数据输出寄存器(DAC_DOR2) 155 11.5.14 DAC寄存器映像 156 12 高级控制定时器(TIM1和TIM8) 157 12.1 TIM1和TIM8简介 157 12.2 TIM1和TIM8主要特性 157 12.3 TIM1和TIM8功能描述 158 12.3.1 时基单元 158 12.3.2 计数器模式 160 12.3.3 重复计数器 167 12.3.4 时钟选择 168 12.3.5 捕获/比较通道 171 12.3.6 输入捕获模式 173 12.3.7 PWM输入模式 174 12.3.8 强置输出模式 174 12.3.9 输出比较模式 175 12.3.10 PWM模式 176 12.3.11 互补输出和死区插入 178 12.3.12 使用刹车功能 179 12.3.13 在外部事件时清除OCxREF信号 180 12.3.14 产生六步PWM输出 181 12.3.15 单脉冲模式 182 12.3.16 编码器接口模式 183 12.3.17 定时器输入异或功能 185 12.3.18 与霍尔传感器的接口 185 12.3.19 TIMx定时器和外部触发的同步 187 12.3.20 定时器同步 190 12.3.21 调试模式 190 12.4 TIM1和TIM8寄存器描述 191 12.4.1 控制寄存器1(TIMx_CR1) 191 12.4.2 控制寄存器2(TIMx_CR2) 192 12.4.3 从模式控制寄存器(TIMx_SMCR) 193 12.4.4 DMA/中断使能寄存器(TIMx_DIER) 195 12.4.5 状态寄存器(TIMx_SR) 196 12.4.6 事件产生寄存器(TIMx_EGR) 197 12.4.7 捕获/比较模式寄存器1(TIMx_CCMR1) 198 12.4.8 捕获/比较模式寄存器2(TIMx_CCMR2) 200 12.4.9 捕获/比较使能寄存器(TIMx_CCER) 202 12.4.10 计数器(TIMx_CNT) 203 12.4.11 预分频器(TIMx_PSC) 204 12.4.12 自动重装载寄存器(TIMx_ARR) 204 12.4.13 重复计数寄存器(TIMx_RCR) 204 12.4.14 捕获/比较寄存器1(TIMx_CCR1) 205 12.4.15 捕获/比较寄存器2(TIMx_CCR2) 205 12.4.16 捕获/比较寄存器3(TIMx_CCR3) 205 12.4.17 捕获/比较寄存器(TIMx_CCR4) 206 12.4.18 刹车和死区寄存器(TIMx_BDTR) 206 12.4.19 DMA控制寄存器(TIMx_DCR) 208 12.4.20 连续模式的DMA地址(TIMx_DMAR) 208 目录 STM32F10xxx参考手册 8/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 12.4.21 TIM1和TIM8寄存器图 209 13 通用定时器(TIMx) 211 13.1 TIMx简介 211 13.2 TIMx主要功能 211 13.3 TIMx功能描述 212 13.3.1 时基单元 212 13.3.2 计数器模式 213 13.3.3 时钟选择 221 13.3.4 捕获/比较通道 223 13.3.5 输入捕获模式 225 13.3.6 PWM输入模式 225 13.3.7 强置输出模式 226 13.3.8 输出比较模式 226 13.3.9 PWM 模式 227 13.3.10 单脉冲模式 229 13.3.11 在外部事件时清除OCxREF信号 231 13.3.12 编码器接口模式 231 13.3.13 定时器输入异或功能 233 13.3.14 定时器和外部触发的同步 233 13.3.15 定时器同步 235 13.3.16 调试模式 239 13.4 TIMx寄存器描述 240 13.4.1 控制寄存器1(TIMx_CR1) 240 13.4.2 控制寄存器2(TIMx_CR2) 241 13.4.3 从模式控制寄存器(TIMx_SMCR) 242 13.4.4 DMA/中断使能寄存器(TIMx_DIER) 243 13.4.5 状态寄存器(TIMx_SR) 244 13.4.6 事件产生寄存器(TIMx_EGR) 245 13.4.7 捕获/比较模式寄存器1(TIMx_CCMR1) 246 13.4.8 捕获/比较模式寄存器2(TIMx_CCMR2) 249 13.4.9 捕获/比较使能寄存器(TIMx_CCER) 251 13.4.10 计数器(TIMx_CNT) 252 13.4.11 预分频器(TIMx_PSC) 252 13.4.12 自动重装载寄存器(TIMx_ARR) 252 13.4.13 捕获/比较寄存器1(TIMx_CCR1) 252 13.4.14 捕获/比较寄存器2(TIMx_CCR2) 253 13.4.15 捕获/比较寄存器3(TIMx_CCR3) 253 13.4.16 捕获/比较寄存器4(TIMx_CCR4) 253 13.4.17 DMA控制寄存器(TIMx_DCR) 254 13.4.18 连续模式的DMA地址(TIMx_DMAR) 254 13.4.19 TIMx寄存器图 255 14 基本定时器(TIM6和TIM7) 257 14.1 TIM6和TIM7简介 257 14.2 TIM6和TIM7的主要特性 257 14.3 TIM6和TIM7的功能 258 14.3.1 时基单元 258 14.3.2 计数模式 259 14.3.3 时钟源 261 14.3.4 调试模式 262 目录 STM32F10xxx参考手册 9/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 14.4 TIM6和TIM7寄存器 262 14.4.1 控制寄存器1(TIMx_CR1) 262 14.4.2 控制寄存器2(TIMx_CR2) 263 14.4.3 DMA/中断使能寄存器(TIMx_DIER) 263 14.4.4 状态寄存器(TIMx_SR) 264 14.4.5 事件产生寄存器(TIMx_EGR) 264 14.4.6 计数器(TIMx_CNT) 264 14.4.7 预分频器(TIMx_PSC) 265 14.4.8 自动重装载寄存器(TIMx_ARR) 265 14.4.9 TIM6和TIM7寄存器图 266 15 实时时钟(RTC) 267 15.1 RTC简介 267 15.2 主要特性 267 15.3 功能描述 267 15.3.1 概述 267 15.3.2 复位过程 268 15.3.3 读RTC寄存器 268 15.3.4 配置RTC寄存器 269 15.3.5 RTC标志的设置 269 15.4 RTC寄存器描述 270 15.4.1 RTC控制寄存器高位(RTC_CRH) 270 15.4.2 RTC控制寄存器低位(RTC_CRL) 270 15.4.3 RTC预分频装载寄存器(RTC_PRLH/RTC_PRLL) 271 15.4.4 RTC预分频器余数寄存器(RTC_DIVH / RTC_DIVL) 272 15.4.5 RTC计数器寄存器 (RTC_CNTH / RTC_CNTL) 272 15.4.6 RTC闹钟寄存器(RTC_ALRH/RTC_ALRL) 273 15.4.7 RTC寄存器映像 275 16 独立看门狗(IWDG) 276 16.1 简介 276 16.2 IWDG主要性能 276 16.3 IWDG功能描述 276 16.3.1 硬件看门狗 276 16.3.2 寄存器访问保护 276 16.3.3 调试模式 276 16.4 IWDG寄存器描述 277 16.4.1 键寄存器(IWDG_KR) 277 16.4.2 预分频寄存器(IWDG_PR) 278 16.4.3 重装载寄存器(IWDG_RLR) 278 16.4.4 状态寄存器(IWDG_SR) 279 16.4.5 IWDG寄存器映像 279 17 窗口看门狗(WWDG) 280 17.1 WWDG简介 280 17.2 WWDG主要特性 280 17.3 WWDG功能描述 280 17.4 如何编写看门狗超时程序 281 17.5 调试模式 282 17.6 寄存器描述 282 目录 STM32F10xxx参考手册 10/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 17.6.1 控制寄存器(WWDG_CR) 282 17.6.2 配置寄存器(WWDG_CFR) 283 17.6.3 状态寄存器(WWDG_SR) 283 17.6.4 WWDG寄存器映像 284 18 灵活的静态存储器控制器(FSMC) 285 18.1 FSMC功能描述 285 18.2 框图 285 18.3 AHB接口 286 18.3.1 支持的存储器和操作 286 18.4 外部设备地址映像 287 18.4.1 NOR和PSRAM地址映像 288 18.4.2 NAND和PC卡地址映像 288 18.5 NOR闪存和PSRAM控制器 289 18.5.1 外部存储器接口信号 290 18.5.2 支持的存储器及其操作 291 18.5.3 时序规则 291 18.5.4 NOR闪存和PSRAM时序图 291 18.5.5 同步的成组读 304 18.5.6 NOR闪存和PSRAM控制器寄存器 308 18.6 NAND闪存和PC卡控制器 313 18.6.1 外部存储器接口信号 313 18.6.2 NAND闪存/PC卡支持的存储器及其操作 314 18.6.3 NAND闪存、ATA和PC卡时序图 314 18.6.4 NAND闪存操作 315 18.6.5 NAND闪存预等待功能 316 18.6.6 NAND闪存的纠错码ECC计算(NAND闪存) 317 18.6.7 NAND闪存和PC卡控制器寄存器 317 18.7 FSMC寄存器地址映象 324 19 SDIO接口(SDIO) 325 19.1 SDIO主要功能 325 19.2 SDIO总线拓扑 325 19.3 SDIO功能描述 328 19.3.1 SDIO适配器 329 19.3.2 SDIO AHB接口 336 19.4 卡功能描述 336 19.4.1 卡识别模式 336 19.4.2 卡复位 336 19.4.3 操作电压范围确认 337 19.4.4 卡识别过程 337 19.4.5 写数据块 338 19.4.6 读数据块 338 19.4.7 数据流操作,数据流写入和数据流读出(只适用于多媒体卡) 338 19.4.8 擦除:成组擦除和扇区擦除 339 19.4.9 宽总线选择和解除选择 340 19.4.10 保护管理 340 19.4.11 卡状态寄存器 342 19.4.12 SD状态寄存器 344 19.4.13 SD I/O模式 347 目录 STM32F10xxx参考手册 11/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 19.4.14 命令与响应 348 19.5 响应格式 350 19.5.1 R1(普通响应命令) 351 19.5.2 R1b 351 19.5.3 R2(CID、CSD寄存器) 351 19.5.4 R3(OCR寄存器) 351 19.5.5 R4(快速I/O) 352 19.5.6 R4b 352 19.5.7 R5(中断请求) 352 19.5.8 R6(中断请求) 353 19.6 SDIO I/O卡特定的操作 353 19.6.1 使用SDIO_D2信号线的SDIO I/O读等待操作 353 19.6.2 使用停止SDIO_CK的SDIO读等待操作 353 19.6.3 SDIO暂停/恢复操作 354 19.6.4 SDIO中断 354 19.7 CE-ATA特定操作 354 19.7.1 命令完成指示关闭 354 19.7.2 命令完成指示使能 354 19.7.3 CE-ATA中断 354 19.7.4 中止CMD61 354 19.8 硬件流控制 354 19.9 SDIO寄存器 355 19.9.1 SDIO电源控制寄存器(SDIO_POWER) 355 19.9.2 SDIO时钟控制寄存器(SDIO_CLKCR) 355 19.9.3 SDIO参数寄存器(SDIO_ARG) 356 19.9.4 SDIO命令寄存器(SDIO_CMD) 356 19.9.5 SDIO命令响应寄存器(SDIO_RESPCMD) 357 19.9.6 SDIO响应1..4寄存器(SDIO_RESPx) 357 19.9.7 SDIO数据定时器寄存器(SDIO_DTIMER) 358 19.9.8 SDIO数据长度寄存器(SDIO_DLEN) 358 19.9.9 SDIO数据控制寄存器(SDIO_DCTRL) 358 19.9.10 SDIO数据计数器寄存器(SDIO_DCOUNT) 360 19.9.11 SDIO状态寄存器(SDIO_STA) 360 19.9.12 SDIO清除中断寄存器(SDIO_ICR) 361 19.9.13 SDIO中断屏蔽寄存器(SDIO_MASK) 362 19.9.14 SDIO FIFO计数器寄存器(SDIO_FIFOCNT) 364 19.9.15 SDIO数据FIFO寄存器(SDIO_FIFO) 364 19.9.16 SDIO寄存器映像 365 20 USB全速设备接口(USB) 366 20.1 USB简介 366 20.2 USB主要特征 366 20.3 USB功能描述 367 20.3.1 USB功能模块描述 368 20.4 编程中需要考虑的问题 369 20.4.1 通用USB设备编程 369 20.4.2 系统复位和上电复位 369 20.4.3 双缓冲端点 372 20.4.4 同步传输 373 20.4.5 挂起/恢复事件 374 目录 STM32F10xxx参考手册 12/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 20.5 USB寄存器描述 375 20.5.1 通用寄存器 375 20.5.2 端点寄存器 380 20.5.3 缓冲区描述表 382 20.5.4 USB寄存器映像 385 21 控制器局域网(bxCAN) 387 21.1 bxCAN简介 387 21.2 bxCAN主要特点 387 21.2.1 总体描述 388 21.3 bxCAN工作模式 389 21.3.1 初始化模式 390 21.3.2 正常模式 390 21.3.3 睡眠模式(低功耗) 390 21.3.4 测试模式 390 21.3.5 静默模式 390 21.3.6 环回模式 391 21.3.7 环回静默模式 391 21.4 bxCAN功能描述 392 21.4.1 发送处理 392 21.4.2 时间触发通信模式 393 21.4.3 接收管理 393 21.4.4 标识符过滤 395 21.4.5 报文存储 398 21.4.6 出错管理 399 21.4.7 位时间特性 400 21.5 bxCAN中断 402 21.6 CAN 寄存器描述 403 21.6.1 寄存器访问保护 403 21.6.2 控制和状态寄存器 403 21.6.3 邮箱寄存器 411 21.6.4 CAN过滤器寄存器 415 21.6.5 bxCAN寄存器列表 419 22 串行外设接口(SPI) 422 22.1 SPI简介 422 22.2 SPI和I2S主要特征 422 22.2.1 SPI特征 422 22.2.2 I2S功能 423 22.3 SPI功能描述 424 22.3.1 概述 424 22.3.2 SPI从模式 426 22.3.3 SPI主模式 427 22.3.4 单工通信 428 22.3.5 状态标志 428 22.3.6 CRC计算 429 22.3.7 利用DMA的SPI通信 429 22.3.8 错误标志 430 22.3.9 关闭SPI 430 22.3.10 SPI中断 430 目录 STM32F10xxx参考手册 13/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 22.4 I2S功能描述 431 22.4.1 I2S功能描述 431 22.4.2 支持的音频协议 432 22.4.3 时钟发生器 437 22.4.4 I2S主模式 438 22.4.5 I2S从模式 439 22.4.6 状态标志位 440 22.4.7 错误标志位 441 22.4.8 I2S中断 441 22.4.9 DMA功能 441 22.5 SPI和I2S寄存器描述 442 22.5.1 SPI控制寄存器1(SPI_CR1)(I2S模式下不使用) 442 22.5.2 SPI控制寄存器2(SPI_CR2) 443 22.5.3 SPI 状态寄存器(SPI_SR) 444 22.5.4 SPI 数据寄存器(SPI_DR) 445 22.5.5 SPI CRC多项式寄存器(SPI_CRCPR) 446 22.5.6 SPI Rx CRC寄存器(SPI_RXCRCR) 446 22.5.7 SPI Tx CRC寄存器(SPI_TXCRCR) 446 22.5.8 SPI_I2S配置寄存器(SPI_I2S_CFGR) 447 22.5.9 SPI_I2S预分频寄存器(SPI_I2SPR) 448 22.5.10 SPI 寄存器地址映象 449 23 I2C接口 450 23.1 I2C简介 450 23.2 I2C主要特点 450 23.3 I2C功能描述 451 23.3.1 模式选择 451 23.3.2 I2C从模式 452 23.3.3 I2C主模式 454 23.3.4 错误条件 456 23.3.5 SDA/SCL线控制 457 23.3.6 SMBus 457 23.3.7 DMA请求 459 23.3.8 包错误校验(PEC) 460 23.4 I2C中断请求 461 23.5 I2C调试模式 462 23.6 I2C寄存器描述 462 23.6.1 控制寄存器1(I2C_CR1) 462 23.6.2 控制寄存器2(I2C_CR2) 464 23.6.3 自身地址寄存器1(I2C_OAR1) 465 23.6.4 自身地址寄存器2(I2C_OAR2) 465 23.6.5 数据寄存器(I2C_DR) 465 23.6.6 状态寄存器1(I2C_SR1) 466 23.6.7 状态寄存器2 (I2C_SR2) 468 23.6.8 时钟控制寄存器(I2C_CCR) 469 23.6.9 TRISE寄存器(I2C_TRISE) 470 23.6.10 I2C寄存器地址映象 471 24 通用同步异步收发器(USART) 472 24.1 USART介绍 472 24.2 USART主要特性 472 目录 STM32F10xxx参考手册 14/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 24.3 USART功能概述 473 24.3.1 USART 特性描述 474 24.3.2 发送器 475 24.3.3 接收器 477 24.3.4 分数波特率的产生 480 24.3.5 多处理器通信 481 24.3.6 校验控制 482 24.3.7 LIN(局域互联网)模式 483 24.3.8 USART 同步模式 485 24.3.9 单线半双工通信 487 24.3.10 智能卡 487 24.3.11 IrDA SIR ENDEC 功能块 488 24.3.12 利用DMA连续通信 490 24.3.13 硬件流控制 491 24.4 USART中断请求 492 24.5 USART模式配置 493 24.6 USART寄存器描述 494 24.6.1 状态寄存器(USART_SR) 494 24.6.2 数据寄存器(USART_DR) 495 24.6.3 波特比率寄存器(USART_BRR) 496 24.6.4 控制寄存器1(USART_CR1) 496 24.6.5 控制寄存器2(USART_CR2) 498 24.6.6 控制寄存器3(USART_CR3) 499 24.6.7 保护时间和预分频寄存器(USART_GTPR) 501 24.6.8 USART寄存器地址映象 502 25 器件电子签名 503 25.1 存储器容量寄存器 503 25.1.1 闪存容量寄存器 503 25.2 产品唯一身份标识寄存器(96位) 503 26 调试支持(DBG) 505 26.1 概况 505 26.2 ARM参考文献 506 26.3 SWJ调试端口(serial wire and JTAG) 506 26.3.1 JTAG-DP和SW-DP切换的机制 507 26.4 引脚分布和调试端口脚 507 26.4.1 SWJ调试端口脚 507 26.4.2 灵活的SWJ-DP脚分配 507 26.4.3 JTAG脚上的内部上拉和下拉 508 26.4.4 利用串行接口并释放不用的调试脚作为普通I/O口 508 26.5 STM32F10xxx JTAG TAP 连接 509 26.6 ID 代码和锁定机制 509 26.6.1 微控制器设备ID编码 509 26.6.2 边界扫描TAP 510 26.6.3 Cortex-M3 TAP 510 26.6.4 Cortex-M3 JEDEC-106 ID代码 511 26.7 JTAG调试端口 511 26.8 SW调试端口 512 目录 STM32F10xxx参考手册 15/524 参照2008年12月 RM0008 Reference Manual 英文第7版 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本 26.8.1 SW协议介绍 512 26.8.2 SW协议序列 512 26.8.3 SW-DP状态机(Reset, idle states, ID code) 513 26.8.4 DP和AP读/写访问 513 26.8.5 SW-DP寄存器 513 26.8.6 SW-AP寄存器 514 26.9 对于JTAG-DP或SWDP都有效的AHB-AP (AHB 访问端口) 514 26.10 内核调试 515 26.11 调试器主机在系统复位下的连接能力 515 26.12 FPB (Flash patch breakpoint) 515 26.13 DWT(data watchpoint trigger) 516 26.14 ITM (instrumentation trace macrocell) 516 26.14.1 概述 516 26.14.2 时间戳包,同步和溢出包 516 26.15 MCU调试模块(MCUDBG) 517 26.15.1 低功耗模式的调试支持 517 26.15.2 支持定时器、看门狗、bxCAN和I2C的调试 518 26.15.3 调试MCU配置寄存器 518 26.16 TPIU
The C++ Standard Library A Tutorial and Reference (2nd Edition)+cppstdlib-code.zip C++标准库(第二版)英文版.pdf 非扫描版+源代码 Prefaceto the SecondEdition xxiii Acknowledgments for the SecondEdition xxiv Prefaceto the FirstEdition xxv Acknowledgments for the FirstEdition xxvi 1 About This Book 1 1.1 Why This Book. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Before ReadingThis Book. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 Styleand Structure of the Book . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.4 How to ReadThis Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.5 Stateof the Art . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.6 Example Codeand AdditionalInformation . . . . . . . . . . . . . . . . . . . . . 5 1.7 Feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2 Introduction to C++ and the StandardLibrary 7 2.1 Historyof the C++ Standards . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.1.1 Common Questionsabout the C++11 Standard . . . . . . . . . . . . . . 8 2.1.2 Compatibility between C++98 and C++11 . . . . . . . . . . . . . . . . . 9 2.2 Complexity and Big-O Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3 New LanguageFeatures 13 3.1 New C++11 Language Features . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.1.1 Important MinorSyntax Cleanups . . . . . . . . . . . . . . . . . . . . . 13 3.1.2 AutomaticType Deductionwith auto . . . . . . . . . . . . . . . . . . . 14 3.1.3 UniformInitialization and Initializer Lists . . . . . . . . . . . . . . . . . 15 3.1.4 Range-Basedfor Loops . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.1.5 MoveSemanticsand Rvalue References . . . . . . . . . . . . . . . . . . 19 viii Contents 3.1.6 New String Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.1.7 Keyword noexcept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.1.8 Keyword constexpr . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.1.9 New Template Features . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.1.10 Lambdas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.1.11 Keyword decltype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.1.12 New Function Declaration Syntax . . . . . . . . . . . . . . . . . . . . . 32 3.1.13 Scoped Enumerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.1.14 New FundamentalData Types . . . . . . . . . . . . . . . . . . . . . . . 33 3.2 Old “New” Language Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.2.1 ExplicitInitialization for FundamentalTypes . . . . . . . . . . . . . . . 37 3.2.2 Definitionof main() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4 GeneralConcepts 39 4.1 Namespace std . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.2 Header Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.3 Errorand ExceptionHandling . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.3.1 Standard ExceptionClasses. . . . . . . . . . . . . . . . . . . . . . . . . 41 4.3.2 Members of ExceptionClasses. . . . . . . . . . . . . . . . . . . . . . . 44 4.3.3 PassingExceptions with Classexception_ptr . . . . . . . . . . . . . . 52 4.3.4 Throwing Standard Exceptions . . . . . . . . . . . . . . . . . . . . . . . 53 4.3.5 Deriving from Standard ExceptionClasses. . . . . . . . . . . . . . . . . 54 4.4 CallableObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.5 Concurrencyand Multithreading. . . . . . . . . . . . . . . . . . . . . . . . . . . 55 4.6 Allocators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5 Utilities 59 5.1 Pairs and Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.1.1 Pairs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.1.2 Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 5.1.3 I/O for Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 5.1.4 Conversions between tuple sandpairs . . . . . . . . . . . . . . . . . . 75 5.2 Smart Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 5.2.1 Classshared_ptr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 5.2.2 Classweak_ptr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.2.3 Misusing Shared Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . 89 5.2.4 Shared and WeakPointersin Detail. . . . . . . . . . . . . . . . . . . . . 92 5.2.5 Classunique_ptr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Contents ix 5.2.6 Classunique_ptrin Detail . . . . . . . . . . . . . . . . . . . . . . . . 110 5.2.7 Classauto_ptr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 5.2.8 FinalWordsonSmart Pointers . . . . . . . . . . . . . . . . . . . . . . . 114 5.3 Numeric Limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 5.4 Type Traitsand Type Utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 5.4.1 Purposeof Type Traits . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 5.4.2 Type Traitsin Detail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 5.4.3 ReferenceWrappers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 5.4.4 Function Type Wrappers . . . . . . . . . . . . . . . . . . . . . . . . . . 133 5.5 Auxiliary Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 5.5.1 Processing the Minimumand Maximum. . . . . . . . . . . . . . . . . . 134 5.5.2 Swapping Two Va l u e s . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 5.5.3 SupplementaryComparison Operators . . . . . . . . . . . . . . . . . . . 138 5.6 Compile-Time FractionalArithmeticwith Classratio . . . . . . . . . . . . . 140 5.7 Clocks and Timers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 5.7.1 Overview of the ChronoLibrary . . . . . . . . . . . . . . . . . . . . . . 143 5.7.2 Durations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 5.7.3 Clocks and Timepoints . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 5.7.4 Date and TimeFunctions byC and POSIX . . . . . . . . . . . . . . . . . 157 5.7.5 Blocking with Timers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 5.8 Header Files , ,and . . . . . . . . . . . . . . 161 5.8.1 Definitionsin . . . . . . . . . . . . . . . . . . . . . . . . . . 161 5.8.2 Definitionsin . . . . . . . . . . . . . . . . . . . . . . . . . . 162 5.8.3 Definitionsin . . . . . . . . . . . . . . . . . . . . . . . . . . 163 6 The StandardTe m p l a t e Library 165 6.1 STL Components. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 6.2 Containers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 6.2.1 Sequence Containers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 6.2.2 Associative Containers . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 6.2.3 UnorderedContainers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 6.2.4 Associative Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 6.2.5 OtherContainers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 6.2.6 Container Adapters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 6.3 Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 6.3.1 Further Examples of UsingAssociative and UnorderedContainers . . . . 193 6.3.2 Iterator Categories. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 x Contents 6.4 Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 6.4.1 Ranges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 6.4.2 Handling MultipleRanges . . . . . . . . . . . . . . . . . . . . . . . . . 207 6.5 Iterator Adapters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 6.5.1 Insert Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 6.5.2 Stream Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 6.5.3 ReverseIterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 6.5.4 MoveIterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 6.6 User-DefinedGenericFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 6.7 ManipulatingAlgorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 6.7.1 “Removing”Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 6.7.2 ManipulatingAssociative and UnorderedContainers . . . . . . . . . . . 221 6.7.3 Algorithms versus MemberFunctions . . . . . . . . . . . . . . . . . . . 223 6.8 Functions as AlgorithmArguments . . . . . . . . . . . . . . . . . . . . . . . . . 224 6.8.1 UsingFunctions as AlgorithmArguments . . . . . . . . . . . . . . . . . 224 6.8.2 Predicates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 6.9 UsingLambdas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 6.10 Function Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 6.10.1 Definitionof Function Objects . . . . . . . . . . . . . . . . . . . . . . . 233 6.10.2 PredefinedFunction Objects . . . . . . . . . . . . . . . . . . . . . . . . 239 6.10.3 Binders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 6.10.4 Function Objectsand Bindersversus Lambdas . . . . . . . . . . . . . . . 243 6.11 Container Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 6.11.1 Requirements for Container Elements . . . . . . . . . . . . . . . . . . . 244 6.11.2 Va l u eSemanticsor ReferenceSemantics. . . . . . . . . . . . . . . . . . 245 6.12 Errors and Exceptions inside the STL . . . . . . . . . . . . . . . . . . . . . . . . 245 6.12.1 ErrorHandling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 6.12.2 ExceptionHandling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 6.13 Extendingthe STL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 6.13.1 Integrating AdditionalTypes . . . . . . . . . . . . . . . . . . . . . . . . 250 6.13.2 Deriving from STL Types . . . . . . . . . . . . . . . . . . . . . . . . . . 251 7 STL Containers 253 7.1 Common Container Abilitiesand Operations . . . . . . . . . . . . . . . . . . . . 254 7.1.1 Container Abilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 7.1.2 Container Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 7.1.3 Container Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 Contents xi 7.2 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 7.2.1 Abilitiesof Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 7.2.2 ArrayOperations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 7.2.3 Usingarray s as C-StyleArrays . . . . . . . . . . . . . . . . . . . . . . 267 7.2.4 ExceptionHandling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 7.2.5 TupleInterface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 7.2.6 Examples of UsingArrays . . . . . . . . . . . . . . . . . . . . . . . . . 268 7.3 Ve c t o r s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 7.3.1 Abilitiesof Ve c t o r s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 7.3.2 Ve c t o r Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 7.3.3 UsingVe c t o r sas C-StyleArrays . . . . . . . . . . . . . . . . . . . . . . 278 7.3.4 ExceptionHandling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 7.3.5 Examples of UsingVe c t o r s . . . . . . . . . . . . . . . . . . . . . . . . . 279 7.3.6 Classvector . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 7.4 Deques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 7.4.1 Abilitiesof Deques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 7.4.2 Deque Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 7.4.3 ExceptionHandling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 7.4.4 Examples of UsingDeques. . . . . . . . . . . . . . . . . . . . . . . . . 288 7.5 Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 7.5.1 Abilitiesof Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 7.5.2 List Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 7.5.3 ExceptionHandling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 7.5.4 Examples of UsingLists . . . . . . . . . . . . . . . . . . . . . . . . . . 298 7.6 Forward Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 7.6.1 Abilitiesof Forward Lists . . . . . . . . . . . . . . . . . . . . . . . . . . 300 7.6.2 Forward List Operations . . . . . . . . . . . . . . . . . . . . . . . . . . 302 7.6.3 ExceptionHandling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 7.6.4 Examples of UsingForward Lists . . . . . . . . . . . . . . . . . . . . . . 312 7.7 Sets and Multisets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 7.7.1 Abilitiesof Sets and Multisets . . . . . . . . . . . . . . . . . . . . . . . 315 7.7.2 Setand MultisetOperations. . . . . . . . . . . . . . . . . . . . . . . . . 316 7.7.3 ExceptionHandling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 7.7.4 Examples of UsingSets and Multisets . . . . . . . . . . . . . . . . . . . 325 7.7.5 Example of Specifying the Sorting Criterion at Runtime . . . . . . . . . . 328 xii Contents 7.8 Mapsand Multimaps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 7.8.1 Abilitiesof Mapsand Multimaps. . . . . . . . . . . . . . . . . . . . . . 332 7.8.2 Map and Multimap Operations . . . . . . . . . . . . . . . . . . . . . . . 333 7.8.3 UsingMapsas Associative Arrays . . . . . . . . . . . . . . . . . . . . . 343 7.8.4 ExceptionHandling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 7.8.5 Examples of UsingMapsand Multimaps. . . . . . . . . . . . . . . . . . 345 7.8.6 Example with Maps,Strings,and Sorting Criterion at Runtime . . . . . . 351 7.9 UnorderedContainers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 7.9.1 Abilitiesof UnorderedContainers . . . . . . . . . . . . . . . . . . . . . 357 7.9.2 Creating and Controlling UnorderedContainers . . . . . . . . . . . . . . 359 7.9.3 OtherOperationsfor UnorderedContainers . . . . . . . . . . . . . . . . 367 7.9.4 The Bucket Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 7.9.5 UsingUnorderedMapsas Associative Arrays . . . . . . . . . . . . . . . 374 7.9.6 ExceptionHandling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 7.9.7 Examples of UsingUnorderedContainers . . . . . . . . . . . . . . . . . 375 7.10 OtherSTL Containers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 7.10.1 Strings as STL Containers . . . . . . . . . . . . . . . . . . . . . . . . . 385 7.10.2 Ordinary C-StyleArrays as STL Containers . . . . . . . . . . . . . . . . 386 7.11 Implementing ReferenceSemantics . . . . . . . . . . . . . . . . . . . . . . . . . 388 7.12 Whento Use WhichContainer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 8 STL ContainerMembersin Detail 397 8.1 Type Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397 8.2 Create, Copy,and DestroyOperations . . . . . . . . . . . . . . . . . . . . . . . . 400 8.3 Nonmodifying Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 8.3.1 Size Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 8.3.2 Comparison Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . 404 8.3.3 Nonmodifying Operationsfor Associative and UnorderedContainers . . . 404 8.4 Assignments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 8.5 Direct ElementAccess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 8.6 Operationsto Generate Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 8.7 Inserting and RemovingElements . . . . . . . . . . . . . . . . . . . . . . . . . . 411 8.7.1 Inserting Single Elements . . . . . . . . . . . . . . . . . . . . . . . . . . 411 8.7.2 Inserting MultipleElements . . . . . . . . . . . . . . . . . . . . . . . . . 416 8.7.3 RemovingElements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 8.7.4 Resizing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420 Contents xiii 8.8 Special MemberFunctions for Lists and Forward Lists . . . . . . . . . . . . . . . 420 8.8.1 Special MemberFunctions for Lists (and Forward Lists) . . . . . . . . . 420 8.8.2 Special MemberFunctions for Forward Lists Only . . . . . . . . . . . . 423 8.9 Container Policy Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427 8.9.1 Nonmodifying Policy Functions . . . . . . . . . . . . . . . . . . . . . . 427 8.9.2 ModifyingPolicy Functions . . . . . . . . . . . . . . . . . . . . . . . . 428 8.9.3 Bucket Interface for UnorderedContainers . . . . . . . . . . . . . . . . . 429 8.10 Allocator Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430 8.10.1 FundamentalAllocator Members . . . . . . . . . . . . . . . . . . . . . . 430 8.10.2 Constructorswith Optional Allocator Parameters . . . . . . . . . . . . . 430 9 STL Iterators 433 9.1 Header Files for Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433 9.2 Iterator Categories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433 9.2.1 Output Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433 9.2.2 Input Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 9.2.3 Forward Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436 9.2.4 BidirectionalIterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 9.2.5 Random-Access Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . 438 9.2.6 The Incrementand DecrementProblem of Ve c t o r Iterators . . . . . . . . 440 9.3 Auxiliary Iterator Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 9.3.1 advance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 9.3.2 next()and prev(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 9.3.3 distance() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 9.3.4 iter_swap() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 9.4 Iterator Adapters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448 9.4.1 ReverseIterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448 9.4.2 Insert Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454 9.4.3 Stream Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460 9.4.4 MoveIterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 9.5 Iterator Traits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 9.5.1 WritingGenericFunctions for Iterators . . . . . . . . . . . . . . . . . . . 468 9.6 WritingUser-DefinedIterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 xiv Contents 10 STL Function Objectsand UsingLambdas 475 10.1 The Conceptof Function Objects . . . . . . . . . . . . . . . . . . . . . . . . . . 475 10.1.1 Function Objectsas Sorting Criteria . . . . . . . . . . . . . . . . . . . . 476 10.1.2 Function Objectswith Internal State . . . . . . . . . . . . . . . . . . . . 478 10.1.3 The Return Va l u eof for_each() . . . . . . . . . . . . . . . . . . . . . 482 10.1.4 Predicatesversus Function Objects. . . . . . . . . . . . . . . . . . . . . 483 10.2 PredefinedFunction Objectsand Binders . . . . . . . . . . . . . . . . . . . . . . 486 10.2.1 PredefinedFunction Objects . . . . . . . . . . . . . . . . . . . . . . . . 486 10.2.2 Function Adapters and Binders. . . . . . . . . . . . . . . . . . . . . . . 487 10.2.3 User-DefinedFunction Objectsfor Function Adapters . . . . . . . . . . . 495 10.2.4 Deprecated Function Adapters . . . . . . . . . . . . . . . . . . . . . . . 497 10.3 UsingLambdas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499 10.3.1 Lambdas versus Binders . . . . . . . . . . . . . . . . . . . . . . . . . . 499 10.3.2 Lambdas versus StatefulFunction Objects. . . . . . . . . . . . . . . . . 500 10.3.3 Lambdas Calling Global and MemberFunctions . . . . . . . . . . . . . . 502 10.3.4 Lambdas as HashFunction, Sorting,or Equivalence Criterion . . . . . . . 504 11 STL Algorithms 505 11.1 AlgorithmHeader Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505 11.2 AlgorithmOverview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505 11.2.1 A BriefIntroduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506 11.2.2 Classification of Algorithms . . . . . . . . . . . . . . . . . . . . . . . . 506 11.3 Auxiliary Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517 11.4 The for_each()Algorithm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519 11.5 Nonmodifying Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524 11.5.1 Counting Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524 11.5.2 Minimumand Maximum. . . . . . . . . . . . . . . . . . . . . . . . . . 525 11.5.3 SearchingElements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528 11.5.4 Comparing Ranges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542 11.5.5 Predicatesfor Ranges . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550 11.6 ModifyingAlgorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557 11.6.1 Copying Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557 11.6.2 MovingElements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561 11.6.3 Transforming and Combining Elements . . . . . . . . . . . . . . . . . . 563 11.6.4 Swapping Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 11.6.5 AssigningNew Va l u e s . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 11.6.6 ReplacingElements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571 Contents xv 11.7 RemovingAlgorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575 11.7.1 RemovingCertain Va l u e s . . . . . . . . . . . . . . . . . . . . . . . . . . 575 11.7.2 RemovingDuplicates . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578 11.8 Mutating Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583 11.8.1 Reversingthe Orderof Elements . . . . . . . . . . . . . . . . . . . . . . 583 11.8.2 Rotating Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584 11.8.3 PermutingElements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587 11.8.4 Shuffling Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589 11.8.5 MovingElements to the Front . . . . . . . . . . . . . . . . . . . . . . . 592 11.8.6 Partition into Two Subranges . . . . . . . . . . . . . . . . . . . . . . . . 594 11.9 Sorting Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596 11.9.1 Sorting AllElements . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596 11.9.2 Partial Sorting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599 11.9.3 Sorting Accordingto the n th Element . . . . . . . . . . . . . . . . . . . 602 11.9.4 HeapAlgorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604 11.10 Sorted-Range Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608 11.10.1SearchingElements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608 11.10.2MergingElements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614 11.11 Numeric Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623 11.11.1Processing Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623 11.11.2Converting Relativeand Absolute Va l u e s . . . . . . . . . . . . . . . . . . 627 12 SpecialContainers 631 12.1 Stacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632 12.1.1 The Core Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633 12.1.2 Example of UsingStacks . . . . . . . . . . . . . . . . . . . . . . . . . . 633 12.1.3 A User-DefinedStackClass. . . . . . . . . . . . . . . . . . . . . . . . . 635 12.1.4 Classstack in Detail . . . . . . . . . . . . . . . . . . . . . . . . . . 637 12.2 Queues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638 12.2.1 The Core Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639 12.2.2 Example of UsingQueues . . . . . . . . . . . . . . . . . . . . . . . . . 640 12.2.3 A User-DefinedQueue Class . . . . . . . . . . . . . . . . . . . . . . . . 641 12.2.4 Classqueue in Detail . . . . . . . . . . . . . . . . . . . . . . . . . . 641 12.3 PriorityQueues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641 12.3.1 The Core Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643 12.3.2 Example of UsingPriorityQueues. . . . . . . . . . . . . . . . . . . . . 643 12.3.3 Classpriority_queue in Detail . . . . . . . . . . . . . . . . . . . . 644 xvi Contents 12.4 Container Adapters in Detail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645 12.4.1 Type Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645 12.4.2 Constructors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646 12.4.3 SupplementaryConstructorsfor PriorityQueues. . . . . . . . . . . . . . 646 12.4.4 Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647 12.5 Bitsets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650 12.5.1 Examples of UsingBitsets . . . . . . . . . . . . . . . . . . . . . . . . . 651 12.5.2 Classbitsetin Detail . . . . . . . . . . . . . . . . . . . . . . . . . . . 653 13 Strings 655 13.1 Purposeof the String Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656 13.1.1 A First Example: Extractinga Temporary Filename . . . . . . . . . . . . 656 13.1.2 A Second Example: ExtractingWordsand PrintingThemBackward . . . 660 13.2 Description of the String Classes . . . . . . . . . . . . . . . . . . . . . . . . . . 663 13.2.1 String Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663 13.2.2 OperationOverview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666 13.2.3 Constructorsand Destructor . . . . . . . . . . . . . . . . . . . . . . . . 667 13.2.4 Strings and C-Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668 13.2.5 Size and Capacity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669 13.2.6 ElementAccess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671 13.2.7 Comparisons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672 13.2.8 Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673 13.2.9 Substringsand String Concatenation . . . . . . . . . . . . . . . . . . . . 676 13.2.10Input/Output Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . 677 13.2.11Searchingand Finding . . . . . . . . . . . . . . . . . . . . . . . . . . . 678 13.2.12The Va l u enpos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680 13.2.13Numeric Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681 13.2.14Iterator Supportfor Strings . . . . . . . . . . . . . . . . . . . . . . . . . 684 13.2.15Internationalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689 13.2.16Performance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692 13.2.17Strings and Ve c t o r s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692 13.3 String Classin Detail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693 13.3.1 Type Definitionsand StaticVa l u e s . . . . . . . . . . . . . . . . . . . . . 693 13.3.2 Create, Copy,and DestroyOperations . . . . . . . . . . . . . . . . . . . 694 13.3.3 Operationsfor Size and Capacity . . . . . . . . . . . . . . . . . . . . . . 696 13.3.4 Comparisons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697 13.3.5 Character Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699 13.3.6 GeneratingC-Strings and Character Arrays . . . . . . . . . . . . . . . . 700 Contents xvii 13.3.7 ModifyingOperations. . . . . . . . . . . . . . . . . . . . . . . . . . . . 700 13.3.8 Searchingand Finding . . . . . . . . . . . . . . . . . . . . . . . . . . . 708 13.3.9 Substringsand String Concatenation . . . . . . . . . . . . . . . . . . . . 711 13.3.10Input/Output Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 712 13.3.11Numeric Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713 13.3.12GeneratingIterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714 13.3.13Allocator Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715 14 RegularExpressions 717 14.1 The Regex Matchand Search Interface . . . . . . . . . . . . . . . . . . . . . . . 717 14.2 Dealingwith Subexpressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720 14.3 Regex Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726 14.4 Regex Token Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727 14.5 ReplacingRegularExpressions . . . . . . . . . . . . . . . . . . . . . . . . . . . 730 14.6 Regex Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732 14.7 Regex Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735 14.8 The Regex ECMAScriptGrammar . . . . . . . . . . . . . . . . . . . . . . . . . 738 14.9 OtherGrammars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739 14.10 BasicRegex Signaturesin Detail . . . . . . . . . . . . . . . . . . . . . . . . . . 740 15 Input/Output UsingStreamClasses 743 15.1 Common Background of I/O Streams . . . . . . . . . . . . . . . . . . . . . . . . 744 15.1.1 Stream Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744 15.1.2 Stream Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744 15.1.3 Global Stream Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . 745 15.1.4 Stream Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745 15.1.5 Manipulators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746 15.1.6 A Simple Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746 15.2 FundamentalStream Classesand Objects. . . . . . . . . . . . . . . . . . . . . . 748 15.2.1 Classes and ClassHierarchy . . . . . . . . . . . . . . . . . . . . . . . . 748 15.2.2 Global Stream Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . 751 15.2.3 Header Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752 15.3 Standard Stream Operators <> . . . . . . . . . . . . . . . . . . . . . . . . 753 15.3.1 Output Operator <> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754 15.3.3 Input/Output of Special Types . . . . . . . . . . . . . . . . . . . . . . . 755 xviii Contents 15.4 Stateof Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758 15.4.1 Constants for the Stateof Streams . . . . . . . . . . . . . . . . . . . . . 758 15.4.2 MemberFunctions Accessingthe Stateof Streams. . . . . . . . . . . . . 759 15.4.3 Stream Stateand BooleanConditions . . . . . . . . . . . . . . . . . . . 760 15.4.4 Stream Stateand Exceptions . . . . . . . . . . . . . . . . . . . . . . . . 762 15.5 Standard Input/Output Functions . . . . . . . . . . . . . . . . . . . . . . . . . . 767 15.5.1 MemberFunctions for Input . . . . . . . . . . . . . . . . . . . . . . . . 768 15.5.2 MemberFunctions for Output . . . . . . . . . . . . . . . . . . . . . . . 771 15.5.3 Example Uses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772 15.5.4 sentryObjects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772 15.6 Manipulators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774 15.6.1 Overview of AllManipulators . . . . . . . . . . . . . . . . . . . . . . . 774 15.6.2 How ManipulatorsWork . . . . . . . . . . . . . . . . . . . . . . . . . . 776 15.6.3 User-DefinedManipulators. . . . . . . . . . . . . . . . . . . . . . . . . 777 15.7 Formatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779 15.7.1 Format Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779 15.7.2 Input/Output Format of BooleanVa l u e s . . . . . . . . . . . . . . . . . . 781 15.7.3 FieldWidth, Fill Character,and Adjustment . . . . . . . . . . . . . . . . 781 15.7.4 PositiveSign and UppercaseLetters . . . . . . . . . . . . . . . . . . . . 784 15.7.5 Numeric Base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785 15.7.6 Floating-Point Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . 787 15.7.7 GeneralFormatting Definitions . . . . . . . . . . . . . . . . . . . . . . . 789 15.8 Internationalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790 15.9 File Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791 15.9.1 File Stream Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791 15.9.2 Rvalue and MoveSemanticsfor File Streams . . . . . . . . . . . . . . . 795 15.9.3 File Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796 15.9.4 RandomAccess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 799 15.9.5 UsingFile Descriptors . . . . . . . . . . . . . . . . . . . . . . . . . . . 801 15.10 Stream Classesfor Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 802 15.10.1String Stream Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 802 15.10.2MoveSemanticsfor String Streams. . . . . . . . . . . . . . . . . . . . . 806 15.10.3char* Stream Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807 15.11 Input/Output Operators for User-DefinedTypes . . . . . . . . . . . . . . . . . . . 810 15.11.1Implementing Output Operators . . . . . . . . . . . . . . . . . . . . . . 810 15.11.2Implementing Input Operators . . . . . . . . . . . . . . . . . . . . . . . 812 15.11.3Input/Output UsingAuxiliary Functions . . . . . . . . . . . . . . . . . . 814 Contents xix 15.11.4User-DefinedFormat Flags . . . . . . . . . . . . . . . . . . . . . . . . . 815 15.11.5Conventionsfor User-DefinedInput/Output Operators . . . . . . . . . . . 818 15.12 Connecting Input and Output Streams . . . . . . . . . . . . . . . . . . . . . . . . 819 15.12.1Loose Coupling Usingtie() . . . . . . . . . . . . . . . . . . . . . . . . 819 15.12.2TightCoupling UsingStream Buffers . . . . . . . . . . . . . . . . . . . 820 15.12.3Redirecting Standard Streams. . . . . . . . . . . . . . . . . . . . . . . . 822 15.12.4Streamsfor Readingand Writing. . . . . . . . . . . . . . . . . . . . . . 824 15.13 The Stream Buffer Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826 15.13.1The Stream Buffer Interfaces . . . . . . . . . . . . . . . . . . . . . . . . 826 15.13.2Stream Buffer Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . 828 15.13.3User-DefinedStream Buffers . . . . . . . . . . . . . . . . . . . . . . . . 832 15.14 PerformanceIssues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 844 15.14.1Synchronization with C’sStandard Streams . . . . . . . . . . . . . . . . 845 15.14.2Buffering in Stream Buffers . . . . . . . . . . . . . . . . . . . . . . . . . 845 15.14.3UsingStream Buffers Directly . . . . . . . . . . . . . . . . . . . . . . . 846 16 Internationalization 849 16.1 Character Encodingsand Character Sets . . . . . . . . . . . . . . . . . . . . . . . 850 16.1.1 Multibyte and Wide-CharacterText . . . . . . . . . . . . . . . . . . . . . 850 16.1.2 Different Character Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . 851 16.1.3 Dealingwith Character Sets in C++ . . . . . . . . . . . . . . . . . . . . 852 16.1.4 Character Traits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853 16.1.5 Internationalization of Special Characters . . . . . . . . . . . . . . . . . 857 16.2 The Conceptof Locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857 16.2.1 UsingLocales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858 16.2.2 Locale Facets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864 16.3 Localesin Detail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 866 16.4 Facets in Detail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869 16.4.1 Numeric Formatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 870 16.4.2 Monetary Formatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874 16.4.3 Timeand Date Formatting . . . . . . . . . . . . . . . . . . . . . . . . . 884 16.4.4 Character Classification and Conversion . . . . . . . . . . . . . . . . . . 891 16.4.5 String Collation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904 16.4.6 Internationalized Messages . . . . . . . . . . . . . . . . . . . . . . . . . 905 xx Contents 17 Numerics 907 17.1 RandomNumbers and Distributions. . . . . . . . . . . . . . . . . . . . . . . . . 907 17.1.1 A First Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908 17.1.2 Engines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 912 17.1.3 Enginesin Detail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915 17.1.4 Distributions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917 17.1.5 Distributionsin Detail . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921 17.2 Complex Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925 17.2.1 Classcomplex in General . . . . . . . . . . . . . . . . . . . . . . . . 925 17.2.2 Examples UsingClasscomplex . . . . . . . . . . . . . . . . . . . . . 926 17.2.3 Operationsfor Complex Numbers . . . . . . . . . . . . . . . . . . . . . 928 17.2.4 Classcomplex in Detail . . . . . . . . . . . . . . . . . . . . . . . . . 935 17.3 Global Numeric Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941 17.4 Va l a r r a y s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943 18 Concurrency 945 18.1 The High-Level Interface: async() and Futures . . . . . . . . . . . . . . . . . . 946 18.1.1 A First Example Usingasync() and Futures . . . . . . . . . . . . . . . 946 18.1.2 AnExample of Waitingfor Two Tasks . . . . . . . . . . . . . . . . . . . 955 18.1.3 Shared Futures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 960 18.2 The Low-Level Interface: Threadsand Promises . . . . . . . . . . . . . . . . . . 964 18.2.1 Classstd::thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964 18.2.2 Promises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 969 18.2.3 Classpackaged_task . . . . . . . . . . . . . . . . . . . . . . . . . . 972 18.3 Startinga Thread in Detail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973 18.3.1 async() in Detail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974 18.3.2 Futuresin Detail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975 18.3.3 Shared Futuresin Detail. . . . . . . . . . . . . . . . . . . . . . . . . . . 976 18.3.4 Classstd::promise in Detail . . . . . . . . . . . . . . . . . . . . . . . 977 18.3.5 Classstd::packaged_task in Detail . . . . . . . . . . . . . . . . . . . 977 18.3.6 Classstd::thread in Detail . . . . . . . . . . . . . . . . . . . . . . . . 979 18.3.7 Namespace this_thread . . . . . . . . . . . . . . . . . . . . . . . . . 981 18.4 Synchronizing Threads, or the Problem of Concurrency . . . . . . . . . . . . . . 982 18.4.1 Bewareof Concurrency! . . . . . . . . . . . . . . . . . . . . . . . . . . 982 18.4.2 The Reason for the Problem of Concurrent Data Access . . . . . . . . . . 983 18.4.3 WhatExactlyCan GoWrong (the Extent of the Problem) . . . . . . . . . 983 18.4.4 The Features to Solvethe Problems . . . . . . . . . . . . . . . . . . . . . 987 Contents xxi 18.5 Mutexesand Locks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989 18.5.1 UsingMutexesand Locks . . . . . . . . . . . . . . . . . . . . . . . . . . 989 18.5.2 Mutexesand Locks in Detail . . . . . . . . . . . . . . . . . . . . . . . . 998 18.5.3 Calling Oncefor MultipleThreads . . . . . . . . . . . . . . . . . . . . . 1000 18.6 ConditionVa r i a b l e s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1003 18.6.1 Purposeof ConditionVa r i a b l e s . . . . . . . . . . . . . . . . . . . . . . . 1003 18.6.2 A First Complete Example for ConditionVa r i a b l e s . . . . . . . . . . . . 1004 18.6.3 UsingConditionVa r i a b l e s to Implement a Queue for MultipleThreads . . 1006 18.6.4 ConditionVa r i a b l e s in Detail . . . . . . . . . . . . . . . . . . . . . . . . 1009 18.7 Atomics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012 18.7.1 Example of UsingAtomics . . . . . . . . . . . . . . . . . . . . . . . . . 1012 18.7.2 Atomicsand TheirHigh-Level Interface in Detail . . . . . . . . . . . . . 1016 18.7.3 The C-StyleInterface of Atomics . . . . . . . . . . . . . . . . . . . . . . 1019 18.7.4 The Low-Level Interface of Atomics . . . . . . . . . . . . . . . . . . . . 1019 19 Allocators 1023 19.1 UsingAllocatorsas an Application Programmer . . . . . . . . . . . . . . . . . . 1023 19.2 A User-DefinedAllocator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1024 19.3 UsingAllocatorsas a LibraryProgrammer . . . . . . . . . . . . . . . . . . . . . 1026 Bibliography 1031 Newsgroups and Forums . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031 Books and Web Sites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1032 Index 1037 This page intentionally left blank

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值