一、标准库类型string
标准库类型string表示可变长的字符序列,使用string类型必须首先包含string头文件。
1.定义和初始化string对象
2.string对象上的操作
读写string对象
在执行读取操作时,string对象会自动忽略开头的空白(即空格符、换行符、制表符等)并从第一个真正的字符开始读起,直到遇见下一处空白为止。
读取未知数量的string对象
使用getline读取一整行
getline函数的参数是一个输入流和一个string对象,函数从给定的输入流中读入内容,直到遇到换行符为止(注意换行符也被读进来了),然后把所读的内容存入到那个string对象中去(注意不存换行符)。
比较string对象
字面值和string对象相加
当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符(+)的两侧的运算对象至少有一个是string:
字符串字面值与string是不同的类型。
3.处理string对象中的字符
在cctype头文件中定义了一组标准库函数:
处理每个字符?使用基于范围的for语句
这种语句遍历给定序列中的每个元素并对序列中的每个值执行某种操作,其语法形式是:
如果想要改变string对象中字符的值,必须把循环变量定义成引用类型。
访问string对象中的单个字符
两种方式:①使用下标 ②使用迭代器
二、标准库类型vector
标准库类型vector表示对象的集合,其中所有对象的类型都相同。集合中的每个对象都有一个与之对应的索引,索引用于访问对象。
C++函数既有类模板也有函数模板。其中vector是一个类模板。编译器根据模板创造类或函数的过程称为实例化,当使用模板时,需要指出编译器应把类或函数实例化为何种类型。
1. 定义和初始化vector对象
2.向vector对象中添加元素
vector的成员函数push_back负责把一个值当成vector对象的尾元素“压到(push)”vector对象的“尾端(back)”。
Note:范围for语句体内不应改变其所遍历序列的大小。如果循环体内包哦含有向vector对象添加元素的语句,则不能使用范围for循环。
3.其他vector操作
只有当元素的值可比较时,vector对象才能被比较。
不能用下标形式添加元素
三、迭代器介绍
所有的标准库容器和string对象都可以使用迭代器。迭代器提供了对对象的间接访问。
1.使用迭代器
类型拥有返回迭代器的成员:begin和end。其中begin成员负责第一个元素(或第一个字符)的迭代器,end成员则负责返回指向容器(或string对象)“尾元素的下一位置”的迭代器。
eg.
迭代器类型
begin和end运算符
如果对象是常量,begin和end返回const_iterator;如果对象不是常量,返回iterator。
而cbegin和cend不管对象本身是否是常量,返回值都是const_iterator。
2.迭代器运算
四、数组
1.定义和初始化内置数组
定义数组的时候必须指定数组的类型,不允许用auto关键字由初始值的列表推断类型。
字符数组的特殊性
不允许拷贝和赋值
2.访问数组元素
当需要遍历数组中的所有元素时,最好的办法也是使用范围for语句。
3.指针和数组
在很多用到数组名字的地方,编译器会自动地将其替换为一个指向数组首元素的指针:
使用decltype关键字时上述转换不会发生。
标准库函数begin和end
使用方法:将数组作为它们的参数。
标准库类型和string限定使用的下标必须是无符号类型,而内置的下标运算符可以处理负值。
4.C风格字符串
C风格字符串不是一种类型,而是为了表达和使用字符串而形成的一种约定俗成的写法。按此习惯书写的字符串存放在字符数组中并以空字符结束。
使用数组初始化vector对象
用于初始化vector对象的值也可能仅是数组的一部分。
四、多维数组
练习3.43