[c++primer][03]标准库类型
3.1 using声明
using namspace::name;
一旦使用了using声明,就可以直接引用名字,不需要再引用该名字的命名空间
3.2 string类型
读入未知数目的string对象
while(cin >> word){ cout << word << endl; }
用getline读取整行文本,默认遇到换行符结束( 不存储换行符 )
while(getline(cin, line){ cout << line << endl; }
string对象的赋值
从概念上讲,赋值操作先把左操作数占用的空间释放,再分配足够存放右操作数的内存空间,最后将右操作数中所有字符复制到新分配的空间。
下标操作
string类型可以通过[ ]访问单个字符,下标操作可用作左值,下标值(索引)应为string::size_type类型
3.3 vector类型
vector是一个类模板(class template),可用来定义任意多种数据类型。vector不是数据类型,vector<int>是数据类型。
初始化
vector<T> v(n); //v含有值初始化的元素的n个副本
什么是值初始化?
如果没有指定元素的初始化式,标准库将自行提供一个元素初始值进行值初始化,这个初始值将用来初始化容器中的每个元素。
根据vector存放的数据类型分三种情况:1)内置类型,初始值为0;2)含构造函数的类类型,用默认构造函数初始化;3)无构造函数,标准库仍然产生一个带初始值的对象。
必须是已经存在的元素才能用下标操作符进行索引。通过下标操作进行赋值时,不会添加任何元素。
3.4 迭代器简介
现代C++更倾向于使用迭代器而不是下标操作访问容器元素。
迭代器的操作
由end操作返回的迭代器指向vector的“末端元素的下一个”,称为超出末端迭代器。迭代器支持自增或解引用,但end返回的迭代器不指向任何元素,不能进行上述操作。
用==或!=操作符来比较迭代器,如果两个迭代器指向同一对象,则它们相等,否则不相等。
const_iterator
算术操作(vector迭代器)
iter + n;
iter - n;
iter1 – iter2; //计算迭代器对象的距离,该距离是名为different_type的signed类型
注意:任何改变vector长度的操作都会使已存在的迭代器失效。
3.5 bitset类型
bitset<32> bitvec;//定义了一个含有32位的bitset对象
用string对象初始化bitset对象时,从string对象读入位集的顺序是从右向左(string对象的最右边字符用来初始化bitset对象低阶位)
size_type是string类型和vector类型定义的与机器无关的unsigned 类型,用于保存任意string对象或vector对象的长度。
different_type是由vector类型定义的signed整型,用于存储任意两个迭代器间的距离。
size_t是与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小;
ssize_t是与机器相关的signed类型。