第三章:字符串,向量和数组

3.1 命名空间using声明

在这里插入图片描述
每个名字都需要独立的using声明
头文件不应该包含using声明

3.2 标准库string

3.2.1 定义和初始化string对象

在这里插入图片描述
直接初始化和拷贝初始化
在这里插入图片描述

3.2.2 string对象上的操作

在这里插入图片描述
读写sring对象
在这里插入图片描述
读取位置数量多string对象
在这里插入图片描述
使用getline读取一整行
有时希望在最终的到达字符串中保留输入时的空白符,这是用getline函数代替原来的>>运算符
在这里插入图片描述
在这里插入图片描述
string的empty和size操作
在这里插入图片描述
在这里插入图片描述
string::size_type类型
size函数返回的不是unsigned类型,而是string::size_type类型
虽然无法确定string::size_type类型的细节,但是可以肯定其是一个无符号类型的值,且能够存放下任何string对象的大小
比较string对象
在这里插入图片描述
为string对象赋值
在这里插入图片描述
两个string对象相加
在这里插入图片描述
字面值和string对象相加
在这里插入图片描述
在这里插入图片描述

3.2.3 处理string对象中的字符

在这里插入图片描述
在这里插入图片描述
处理每个字符?使用基于范围的for语句
在这里插入图片描述
使用范围for语句改变字符串中的字符
此时需要把循环变量定义成引用类型
在这里插入图片描述
只处理一部分字符?

  1. 使用下标运算符[]
    在这里插入图片描述
  2. 使用迭代器
    使用下标执行随机访问

3.3 标准库类型vector

vector表示对象的集合,其中所有对象的类型都相同,集合中每个对象都有一个与之对应的索引用于访问对象。因为vector容纳着其他对象,所以它也常被称作容器。
在这里插入图片描述
C++语言既有类模板也有函数模板,其中vector是一个类模板。

3.3.1 定义和初始化vector对象

在这里插入图片描述
列表初始化vector对象
在这里插入图片描述
创建指定数量的元素
在这里插入图片描述
值初始化vector对象
在这里插入图片描述
列表初始值还是元素数量
花括号还是圆括号
在这里插入图片描述

3.3.2 向vector对象中添加元素

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
向vector对象添加元素蕴含的编程假定
循环体内部含有向vector对象添加元素的语句,则不能使用范围for循环

3.3.3 其他vector操作

在这里插入图片描述
计算vector内对象的索引
在这里插入图片描述
在这里插入图片描述
不能用下标形式添加元素
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.4 迭代器介绍

类似于指针类型,迭代器也提供了对对象的简介访问。

3.4.1 使用迭代器

和指针不一样的是,获取迭代器不是使用取地址符,有迭代器的类型同时拥有返回迭代器的成员,比如begin和end成员,其中,beging返回指向第一个元素的迭代器。
在这里插入图片描述

迭代器运算符
在这里插入图片描述
在这里插入图片描述
将迭代器从一个元素移动到另外一个元素
使用递增运算符++
在这里插入图片描述
在这里插入图片描述
迭代器类型
一般我们无需了解爹地阿奇的类型,实际上,拥有迭代器的标准库使用iterator和const_iterator来表示迭代器的类型。
在这里插入图片描述
在这里插入图片描述
begin和end运算符
begin和end返回的具体类型由对象是否是常量决定,如果是返回const_iterator,否则返回iterator
如果对象只需要读而无需写操作,最好使用常量类型,cbegin和cend实现了返回常量类型的功能
结合解引用和成员访问操作
解引用迭代器可获得迭代器所指向的对象,如果该对象的类型恰好是类,就可以进一步访问它的成员。
在这里插入图片描述
为了简化上述表达式,C++语言定义了箭头运算符(->),箭头运算符把解引用和成员访问两个操作结合在一起。
在这里插入图片描述
某些对vector对象的操作会使迭代器失效

  1. 使用了迭代器的循环体不能向迭代器所属容器添加元素
  2. 任何可以改变vector对象容量的操作,如push_back都会使该vector对象的迭代器失效

3.4.2 迭代器运算

在这里插入图片描述
使用迭代器运算
使用迭代器运算的一个经典算法是二分搜索。
在这里插入图片描述

3.5 数组

数组类似标准库类型vector的数据结构,但是灵活性和性能又与vector有所不同。
与vector相同的是,数组也是存放类型相同的对象的容器,但是这些对象本身没有名字。
与vector不同的是,数组的大小确定不变

3.5.1 定义和初始化内置数组

在这里插入图片描述
显示初始化数组元素
在这里插入图片描述
字符数组的特殊性
在这里插入图片描述
不允许拷贝和赋值
在这里插入图片描述
理解复杂的数组声明
在这里插入图片描述

3.5.2 访问数组元素

数组下标通常使用size_t,它是一种机器相关的无符号类型,它被设计得足够大以便能表示内存中任意对象的大小,其在cstddef头文件中定义。
检查下标的值
在这里插入图片描述

3.5.3 指针和数组

在这里插入图片描述
指针也是迭代器
vector和string的迭代器支持的运算,数组的指针全都支持。
在这里插入图片描述
标准库函数begin和end
两个函数定义在iterator头文件中
在这里插入图片描述
指针运算
可执行所有迭代器的运算。
解引用和指针运算的交互
在这里插入图片描述
下标和指针
对数组执行下标运算其实是对指向数组元素的指针执行下标运算
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.5.4 C风格字符串

C标准库String函数
在这里插入图片描述
传入此类函数的指针必须指向以空字符串作为结束的数组
比较字符串
比较两个C风格的字符串的方法与比较标准库string对象的方法大相径庭。
在这里插入图片描述
在这里插入图片描述
需要调用strcmp函数
在这里插入图片描述
目标字符串的大小由调用者指定
在这里插入图片描述
在这里插入图片描述

3.5.5 与旧代码的接口

混用string对象和C风格字符串
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用数组初始化vector对象
在这里插入图片描述
在这里插入图片描述

3.6 多维数组

多维数组的初始化
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

多维数组的下标引用
在这里插入图片描述
使用范围for语句处理多维数组
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
指针和多维数组
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
类型别名简化多维数组的指针
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/tanfuz/article/details/114068681