第三章 标准库类型
1. 俩种最重要的标准库类型:
- string:支持长度可变的字符串
- vector:可用于保存一组指定类型的对象。
2. 命名空间的using声明
有一种情况必须使用完全限定的标准库的名字:在头文件中,理由是头文件的内容会被预处理器复制到程序中。用#include包含文件时,相当于头文件中的文本将成为我们编写的文件的一部分。如果在头文件中放置using声明,就相当于在包含该文件using的每个程序都放置了同一个using。不论该程序是否需要using声明。
3. 标准库string类型
- string类型支持长度可变的字符串,C++标准库将负责管理与存储相关的内存,以及提供各种有用的操作。
- string标准库支持几个构造函数,当没有明确指定对象初始化式时,系统将使用默认构造函数。
- string对象的操作
- string类类型和许多其他库类型都定义了一些配套类型,通过这些配套类型,库类型的使用就能与机器无关,size_type就是这些配套类型中的一种。即string::size_type.
- 当string对象和字符串面值混合连接操作时,+操作符的左右操作数必须至少有一个是string类型。
4. cctype中的函数
5. 标准库vector类型
- vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和string对象一样,标准库将负责管理与存储元素相关的内容,我们把vector称为容器。
- vector是一个类模板。
- vector初始化
- vector的操作
- 下标操作不添加元素,只能对确知已存在的元素才能进行下标操作。
6. 迭代器
- 除了使用下标来访问vector对象的元素外,标准库还提供了另一种访问元素的方法:使用迭代器。迭代器是一种检查容器内元素并遍历元素的数据类型。
- 每个容器都定义了自己的迭代器如vector: vector<int>::interator inter;
- begin和end操作:begin返回的迭代器指向第一个元素;end操作返回的迭代器指向vector的末端元素的下一个。超出末端迭代器。表面它指向一个不存在的元素。
- 迭代器类型可使用解引用操作符(*)来访问迭代器所指向的元素。
- cost_iterator:只能用于读取容器内元素,但是不能改变其值。
- 任何改变vector长度的操作都会使已存在的迭代器失效。例如,在调用push_back之后,就不能再信赖指向vector的迭代器的值了。
7. 标准库bitset
- 初始化
- 操作
第四章 数组和指针
1. 数组
- 数组的定义与初始化
- 不允许直接复制和赋值
- 数组的长度是固定,一经定义,就不允许再添加元素
2. 指针
- 指针和引用的比较:第一个区别在于引用总是指向某个对象,定义引用时没有初始化式错误的。第二则是赋值行为的差异,给引用赋值修改的是该引用所关联的对象的值,而并不是使引用与另一个对象关联。
- 指针数组与指向数组的指针
- 俩个指针减法操作的结果是标准库类型ptrdiff_t的数据
3. 创建动态数组
- 使用new 和 delete来完成动态数组的创建的销毁
- 动态数组分配时,如果数组元素具有类类型,将使用该类的默认构造函数实现初始化;如果数组元素是内置类型,则无初始化。
- 可以使用跟在数组长度后面的一对空圆括号,对数组元素做初始化。
- 提供delete[]表达式来释放指针所指向的数组空间
- 在要求C风格字符串的地方不可以直接使用标准库string类型对象,但是string类提供了一个名为c_str的成员函数。
- c_str函数返回C风格字符串,返回C风格字符串的表示方法,即返回指向字符数组首地址的指针,该数组存放了与string对象相同的内容,并且以结束符null结束。
- c_str返回的指针指向const char 类型的数组。正确的初始化方式:const char *str = st2.c_str。
- 如果程序需要持续访问该数据,应该复制c_str函数返回的数组。
4. 使用数组初始化vector对象
使用数组初始化vector对象,必须指出用于初始化式的第一个元素以及数组最后一个元素的下一位置的地址:
例如:cost size_t arr_size = 6; int int_arr[arr_size] = {0,1,2,3,4,5};
vector<int> ivec(int_arr, int_arr + arr_size);