读书笔记之:C++ STL 开发技术导引-1
第1章 C++编程技术
1.6 显示类型转换
4种显示类型转换的原型
reinterpret_cast转换:
const_cast转换:
static_cast转换:
dynamic_cast转换:
1.7 C++中的异常处理
多个try块与catch块的对应
捕捉任意类型的异常
异常类型列表,声明不抛出异常的情况
违反异常类型列表抛出异常
另一种常用异常处理方法:继续抛出异常,让调用者处理异常
1.9 友元函数声明可以放在类的任何地方
第2章 C++模板技术
C++中的模板技术是STL中算法和容器得以实现的基础。模板的引入是将C中的预处理宏推广到C++中而来的。
typename可以来指示某个标志是一个类型
类模板的定义
2.3 模板特化技术
该技术完善了模板对于函数或类的定制功能。
函数模板完全特化,类模板完全特化的方式
全特化就是全部特化,即针对所有的模板参数进行特化。偏特化就是部分特化,即针对部分模板参数进行特化。
全特化和偏特化的定义不是很严格,所以有的时候不容易让人理解。
举例如下:
template<class U,class T>
class C{};
全特化:
template<>
class C<int,char>{};
偏特化:
template<class U>
class C<U,int>{};
再看下面的一个例子:
template<class T,class U>
class C<T*,U*>{};
这个也属于模板特化
2.4 函数模板重载
2.5 类模板继承
第3章 C++中的I/O流技术
在C++的标准模板库中,提供了一组模板类和相应的实现类,来支持面向对象的数据输入和输出功能。
C++流类可以实现对象的I/O操作,这是C++所兼容的C标准库I/O函数所不具备的。
I/O流类的模板类的派生关系
C++中的I/O流类的最底层是模板类basic_streambuf
可以看到经常使用的istream,ostream,iostream,ifstream,ofstream和fstreamd都是利用typedef重新定义的类型
STL中的流类的实现:http://www.cplusplus.com/reference/iostream/
3.3 文件输入输出
文件流类都使用open函数来打开文件。
文件流的读写
#include <fstream>
#include <iostream>
using namespace std;
int main(void){
fstream rwFileStream;
rwFileStream.open("d:\\digit.txt", ios::in|ios::out|ios::binary|ios::trunc);
if(!rwFileStream){
cout << "打开文件失败" << endl;
return 1;
}
for(char i=0; i<26; i++)
rwFileStream << char('a'+i); //写入26个字母
//
rwFileStream.seekg(3, ios::beg); //定位到第3个字母处(从0索引)
char c;
rwFileStream.get(c);
cout << c << endl; //打印出字符d
rwFileStream.close();
return 0;
}
3.4 C++中流格式控制
(1)用函数设置或复位格式
setf函数的格式
其他设置函数:
width, precision和fill
(2)用输入输出操作符设置流格式
第2篇 C++STL泛化技术基础
第4章 C++STL泛型库概述
STL提出的过程,如何加入到标准中
STL的各种实现版本
STL程序的编译出现问题时,编译器提供的调试信息一般都晦涩难懂,可抓住一些关键信息进行分析。
4.4 C++ STL体系结构
STL中的容器
STL中的迭代器
STL中的算法实现
STL中的函数对象
STL中的适配器
STL中的内存分配器
STL中的概念(Concept)和模型(Model)
C++ STL中存在的一些问题
本章总结:
第5章 C++ STL泛化技术分析
基于算法的泛化实现,引出了迭代器、函数对象和适配器等相关的泛化技术。
充当标签作用的input_iterator_tag
5.1.4 适配器
迭代器适配器
函数对象适配器
5.2 内存适配器和容器
STL中的内存适配器
使用vector说明一般容器泛化技术
vector的基类:vector_base类
vector类
vector中push_back函数的实现
vector在添加一个元素的实现时使用了place new技术:
5.3 概念