1, 使用 using 声明可以在不需要加前缀 namespace_name:: 的情况下访问命名空间中的名字。using 声明的形式如下:
using namespace::name;
2, string 标准库支持几个构造函数:
string s1; 默认构造函数 s1 为空串
string s2(s1); 将 s2 初始化为 s1 的一个副本
string s3("value"); 将 s3 初始化为一个字符串字面值副本
string s4(n, 'c'); 将 s4 初始化为字符 'c' 的 n 个副本
3, getline 函数从输入流的下一行读取,并保存读取的内容到不包括换行符。和输入操作符不一样的是,getline 并不忽略行开头的换行符。只要 getline 遇到换行符,即便它是输入的第一个字符,getline 也将停止读入并返回。
由于 line 不含换行符,若要逐行输出需要自行添加。照常,我们用 endl 来输出一个换行符并刷新输出缓冲区。
4, string 对象的操作
s.empty() 如果 s 为空串,则返回 true,否则返回 false。
s.size() 返回 s 中字符的个数,最好使用string::size_type 类型 作为返回类型
s[n] 返回 s 中位置为 n 的字符,位置从 0 开始计数
s1 + s2 把 s1 和s2 连接成一个新字符串,返回新生成的字符串
s1 = s2 把 s1 内容替换为 s2 的副本
v1 == v2 比较 v1 与 v2的内容,相等则返回 true,否则返回 false
!=, <, <=, >, and >= 保持这些操作符惯有的含义
5, 我们经常要对 string 对象中的单个字符进行处理,例如,通常需要知道某个特殊字符是否为空白字符、字母或数字。表列出了各种字符操作函数,适用于 string 对象的字符(或其他任何 char 值)。这些函数都在 cctype 头文件中定义。
isalnum(c) 如果 c 是字母或数字,则为 True。
isalpha(c) 如果 c 是字母,则为 true。
iscntrl(c) 如果 c 是控制字符,则为 true
isdigit(c) 如果 c 是数字,则为 true。
isgraph(c) 如果 c 不是空格,但可打印,则为 true。
islower(c) 如果 c 是小写字母,则为 true。
isprint(c) 如果 c 是可打印的字符,则为 true。
ispunct(c) 如果 c 是标点符号,则 true。
isspace(c) 如果 c 是空白字符,则为 true。
isupper(c) 如果 c 是大写字母,则 true。
isxdigit(c) 如果是 c 十六进制数,则为 true。
tolower(c) 如果 c 大写字母,返回其小写字母形式,否则直接返回 c。
toupper(c) 如果 c 是小写字母,则返回其大写字母形式,否则直接返回 c。
6, vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。我们把 vector 称为容器,是因为它可以包含其他对象。一个容器中的所有对象都必须是同一种类型的。以 vector 为例,必须说明 vector 保存何种对象的类型,通过将类型放在类型放在类模板名称后面的尖括号中来指定类型:
vector<int> ivec; // ivec holds objects of type int
vector<Sales_item> Sales_vec; // holds Sales_items
vector 类定义了好几种构造函数(2.3.3 节),用来定义和初始化 vector 对象。
vector<T> v1; vector 保存类型为 T 对象。默认构造函数 v1 为空。
vector<T> v2(v1); v2 是 v1 的一个副本。
vector<T> v3(n, i); v3 包含 n 个值为 i 的元素。
vector<T> v4(n); v4 含有值初始化的元素的 n 个副本。
7, 几种最重要的 vector 操作。
v.empty() 如果 v 为空,则返回 true,否则返回 false。
v.size() 返回 v 中元素的个数。 vector<int>::size_type // ok
v.push_back(t) 尾增加一个值为 t 的元素。
v[n] 返回 v 中位置为 n 的元素。 必须是已存在的元素才能用下标操作符进行索引。 通过下标操作进行赋值时,不会添加任何元素。
v1 = v2 把 v1 的元素替换为 v2 中元素的副本。
v1 == v2 如果 v1 与 v2 相等,则返回 true。
!=, <, <=, >, and >= 保持这些操作符惯有的含义。
8,标准库为每一种标准容器(包括 vector)定义了一种迭代器类型。迭代器类型提供了比下标操作更通用化的方法:所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。因为迭代器对所有的容器都适用,现代 C++ 程序更倾向于使用迭代器而不是下标操作访问容器元素,即使对支持下标操作的 vector 类型也是这样。
每种容器类型都定义了自己的迭代器类型,每个标准库容器类型都定义了一个名为 iterator 的成员,这里的 iterator 与迭代器实际类型的含义相同。如 vector:
vector<int>::iterator iter;
9, 每种容器都定义了一对命名为 begin 和 end 的函数,用于返回迭代器。如果容器中有元素的话,由 begin 返回的迭代器指向第一个元素,由 end 操作返回的迭代器指向 vector 的“末端元素的下一个”.
vector<int>::iterator iter = ivec.begin();
10,迭代器类型可使用解引用操作符(dereference operator)(*)来访问迭代器所指向的元素,解引用操作符返回迭代器当前所指向的元素。假设 iter 指向 vector 对象 ivec 的第一元素,那么 *iter 和 ivec[0] 就是指向同一个元素。下面这个语句的效果就是把这个元素的值赋为 0。迭代器使用自增操作符(1.4.1 节)向前移动迭代器指向容器中下一个元素。
*iter = 0;
11,标准库提供的 bitset 类简化了位集的处理。要使用 bitset 类就必须包含相关的头文件。