第三章是标准库类型,除第二章介绍的基本数据类型外,C++还定义了一个内容丰富的抽象数据类型标准库。其中最重要的标准库类型是string和vector,他们分别定义了大小可变的字符串和集合。string和vector往往将迭代器用作配套类型(companion type),用于访问string中的字符,或者vector中的元素。这些标准库类型是语言组成部分中更基本的那些数据类型(如数组和指针)的抽象。
另一种标准库类型是bitset,提供了一种抽象方法来操作位的集合。与整型值上的内置位操作符相比,bitset类类型提供了一种更方便的处理位的方式。
脚印:
1.抽象数据类型:之所以说这些标准库类型是更高级的,是因为其中反映了更复杂的概念;之所以说它是抽象的,是因为我们在使用时时不需要关心它们是如何表示的,只需知道这些抽象数据类型支持哪些操作就可以了。
2. 命名空间的using声明:使用using声明可以在不需要加前缀namespace_name::的情况下访问命名空间中的名字。Using声明的形式如下:
using namespace::name;
每个名字都需要一个using声明,因为一个using声明一次只能作用于一个命名空间成员。在编译前一定要注意在程序中添加适当的#include和using声明。
3. 头文件应该只定义确实必要的东西!!!
4. 几种初始化String对象的方式:
string s1; | 默认构造函数,s1为空串 |
string s2(s1); | 将s2初始化为s1的一个副本 |
string s3("value"); | 将s3初始化为一个字符串字面值副本 |
string s4(n, 'c'); | 将s4初始化为字符'c'的n个副本 |
5.标准库string类型和字符串字面值的区别:因为历史原因以及为了与C语言兼容,字符串字面值与标准库string类型不是同一种类型。这一点很容易引起混乱,编程时一定要注意区分字符串字面值和string数据类型的使用,这很重要!!!
6. 从标准输入读取string,并将读入的串存储在s中。string类型的输入操作符:
(1)读取并忽略开头所有的空白字符(如空格,换行符,制表符)。
(2)读取字符直至再次遇到空白字符,读取终止。
7. getline:这个函数接受两个参数:一个输入流对象和一个string对象。getline函数从输入流的下一行读取,并保存读取的内容到string中,但不包括换行符。
8.结束符还是end-of-file
9.由于getline函数返回时丢弃换行符,换行符将不会存储在string对象中。
10. string::size_type类:size操作返回的是string::size_type类型的值。所以任何存储string的size操作结果的变量必须为string::size_type类型。特别重要的是,不要把size的返回值赋给一个int变量。
11.string对象中字符的处理:
12.建议:采用C标准库头文件的C++版本!C++标准库除了定义了一些特定于C++的设施外,还包括C标准库。C++中的头文件cctype其实就是利用了C标准库函数,这些库函数就定义在C标准库的ctype.h头文件中。
C标准库头文件命名形式为name.h,而C++版本则命名为cname,少了后缀.h而在头文件名前加了c。c表示这个头文件源自C标准库。因此,cctype与ctype.h文件的内容是一样的,只是采用了更适合C++程序的形式。特别地,cname头文件中定义的名字都定义在命名空间std内,而.h版本中的名字却不是这样。
通常,C++程序中应采用cname这种头文件的版本,而不采用name.h版本,这样,标准库中的名字在命名空间std中保持一致。使用.h版本会给程序员带来负担,因为他们必须记得哪些标准库名字是从C继承来的,而哪些是C++所特有的。
13.string操作
s.empty() s.size() s[n] s1 + s2 s1 = s2 v1 == v2 !=, <, <=, > 和 >= | 如果s为空串,则返回true,否则返回false。 返回s中字符的个数。 返回s中位置为n的字符,位置从0开始计数。 把s1和s2连接成一个新字符串,返回新生成的字符串。 把s1内容替换为s2的副本。 比较v1与v2的内容,相等则返回true,否则返回false。 保持这些运算符惯有的含义。 |
14. 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。 |
——??XāΩādцぴ??