3.1命名空间的using声明
C++引入了类作用域,类是出现在文件内。在不同的作用域中可以定义相同名字的变量,互不干扰便于系统区别他们。
通过声明命名空间,可以方便地访问该空间下的变量、函数。
using namespace std;
也可以直接声明命名空间的变量、函数。用什么,声明什么。
using std::cin;
自定义命名空间。
namespace ns1//指定命名空间ns1
{
int a;
double b;
}
头文件不应包含using声明
防止冲突。
3.2标准库类型string
长度可变的字符序列。内存连续。
string 相当于特殊的容器。
3.2.1定义和初始化string对象
string s1; //默认初始化
string s2(s1); //直接初始化
string s3 = s1; //拷贝初始化
string s4("value"); //直接初始化
string s5 = "value"; //拷贝初始化
string s6(5, 'c'); //直接初始化
3.2.2string对象上的操作
读写string对象
3.2.3处理string对象中的字符
cctype头文件中的函数 | |
isalnum(c) | 当c是字母或数字时为真 |
isalpha(c) | 当c是字母时为真 |
iscntrl(c) | 当c是控制字符时为真 |
isdigit(c) | 当c是数字时为真 |
isgraph(c) | 当c不是空格但可打印时为真 |
islower(c) | 当c是小写字母时为真 |
isprint(c) | 当c是可打印字符时为真 |
ispunct(c) | 当c是标点符号时为真 |
isspace(c) | 当c是空白时为真 |
isupper(c) | 当c是大鞋字母时为真 |
isxdigit(c) | 当c是十六进制数字时为真 |
tolower(c) | 如果c是大写字母,输出对应的小写字母;否则原样输出c |
toupper(c) | 如果c是小写字母,输出对应的大写字母;否则原样输出c |
3.3标准库类型vector
C++既有类模板,也有函数模板。
模板本身不是类或函数,可以看作 为编译器生成类或函数编写的一份说明。
编译器根据目标创建类或函数的过程叫实例化。
3.3.1 定义和初始化vector对象
列表初始化vector对象
3.3.3vector支持的操作
Vector支持的操作 | |
v.empty() | 如果v不含任何元素,则为真;否则假 |
v.size() | 返回v中元素个数 |
v.push_back(t) | 向v的尾端添加一个值为t的元素 |
v[n] | 返回v中索引为n的元素的引用 |
v1 = v2 | 用v2中元素的拷贝替换v1中的元素 |
v1={a,b,c} | 用列表中的元素替换v1的元素 |
v1 == v2 | 比较是否相等 |
v1 != v2 | 比较是否不相等 |
<,<=,>,>= | 以字典顺序进行比较 |
v.clear() | 清空 |
v.erase(it) | 删除迭代器it指向的元素。返回尾后迭代器。 |
3.4迭代器介绍
迭代器:容器类型内置的“指针”
标准容器迭代器的运算符 | |
*iter | 返回迭代器iter所指元素的引用 |
iter->mem | 解引用iter并获取该元素的名为mem的成员 |
++iter | 令iter指向容器的下一个元素 |
--iter | 令iter指向容器的上一个元素 |
iter1 == iter2 | 判断两个迭代器是否相等 |
iter1 != iter2 | 判断两个迭代器是否不相等 |
end表示尾后,它本身不指向元素,不能解引用
3.5数组
定义数组时,维度应该是const
显示初始化数组元素
字符数组的特殊性
不能将数组的内容拷贝给其他数组作为初始值。
3.5.3 指针和数组
C++中,使用数组的时候编译器一般会把它转换成指针。
取值符& 获取指向某个对象的指针。
编译器会将数组名替换为指向数组首元素的指针。
3.5.4 C风格字符串
标准容器迭代器的运算符 | |
strlen(p) | 返回p的长度,空字符不计算在内 |
strcmp(p1,p2) | 比较p1和p2的相等性;相等为0;p1大为正;p1小为负。 |
strcat(p1,p2) | 将p2附加到p1之后,返回p1 |
strcpy(p1,p2) | 将p2拷贝到p1,返回p1 |
3.6多维数组