抽象数据类型(abstract data type)
通常,头文件中应该只定义确定必要的东西
标准库string 类型
#include<string>
using std::string;
string的定义和初始化
string类型的输入操作符:
string s;
cin>>s;
读取并忽略开关所有的空白字符(如空格、换行符,制表符);
读取字符直到再次遇到空白字符,读取终止。
string的输入操作符会返回所给的数据流,因此,可以把输入当作判断条件。
用getline读取整行文本
getline接受两个参数:一个输入流对象和一个string对象。
getline并不忽略行开关的换行符。
string类型的输入操作符和getline函数分别如何处理空白字符:
1、string类型的输入操作符对空白操作符的处理:读取并忽略有效字符(非空白字符)之前所有的空白字符,然后读取字符直到再次遇到空白字符,读取终止(该空白字符仍然在输入流中)。
2、getline函数对空白字符的处理:不忽略开关的空白字符,读取字符直到遇到换行符,读取终止并丢弃换行符(换行符从输入流中去掉但并不存储在string对象中)。
string对象的操作:
s.empty();
s.size();
s[n];
s1 + s2;
s1 = s2;
string对象和字符串字面值混合连接操作时,+操作符的左右操作数必须至少有一个string类型的。
string类型可通过下标操作符([ ])访问string对象的某个字符。
string对象中字符的处理
#include<cctype>
标准库vector类型
一个容器中的所有对象都必须是同一个类型的。
#include<vector>
using std::vector;
vector是一个类模板(class template)。
vector对象(以及其他标准库容器对象)的重要属性就在于可以在运行高效地添加元素,因为vector增长的效率高,在元素什己知的情况下,最好是动态地添加元素。
vector对象的操作
v.empty();
v.size();
v.push_back(t);
v1 = v2;
v1 == v2;
迭代器简介
迭代器(iterator)所存的标准库容器都定义了相关的迭代器类型。
若一种类型支持一组确定的操作,(这些操作可用来遍历容器内的元素,并访问这些元素的值),我们就称这种类型为迭代器。
begin和end操作
由begin返回的迭代器指向第一个元素;
由end操作返回的迭代器指向vector的“末端元素的下一个”。通常称之为超出末端迭代器(off-the-end iterator)。
const_iterator
该类型只能用于读取容器内元素,但不能更改其值,迭代器本身可以改变。
对const_iterator解引用时,可以得到一个指向const对象的引用。
const_iterator与const iterator不相同,后者基本没用。
迭代器的自述操作:
iter±n 可用迭代器加上或减去一个整型值
iter1 – iter2 计算两个迭代器对象的距离,该距离是名为defference_type的signed(只是数值类型,不代表两类型完全相同)类型的值,iter1与iter2两者必须都指向同一vector的元素或末端之后的下一个元素。
两个迭代器相加的操作是末定义的。
标准库bitset类型
#include<bitset>
using std::vector;
bitset类型对象的区别在公在其长度而不在其基类型。
bitset<n> b;
bitset<n> b(s); //b是string对象s中含有的位串的副本
当用string对象初始化bitset对象时,string对象直接表示为位模式