《C++ Primer》 读书笔记——第九章 顺序容器

第九章 顺序容器

9.1 顺序容器概述

在这里插入图片描述
一般情况下推荐使用vector

9.2 容器库概略

所有容器库通用的操作
在这里插入图片描述

1、const类型的迭代器

当不需要进行写访问时,最好使用cbegin和cend

2、容器的定义和初始化

在这里插入图片描述

3、容器间的拷贝问题

将一个新容器创建为另一个容器的拷贝的方法有两种:可以直接拷贝整个容器;或者拷贝一个由迭代器指定的元素范围。
直接拷贝容器需要类型相同才能够拷贝。
而通过迭代器拷贝只需要类型兼容就可以。
在这里插入图片描述

4、array具有固定大小

array的大小也是类型的一部分
在这里插入图片描述
在对array进行初始化时:
①、初始化值的个数问题
②、array可以直接拷贝另一个array。而内置数组类型则不行
在这里插入图片描述

5、赋值与swap

在这里插入图片描述
赋值会导致迭代器、引用、指针失效
通常使用非成员版本的swap效果更好

6、关系运算符

在这里插入图片描述
只有当其元素类型也定义了相应的比较运算符时,我们才可以使用关系运算符来比较两个容器。
如果元素类型不支持所需运算符,那么保存这种元素的容器九不能使用相应的关系运算符。

9.3 顺序容器操作

1、添加元素

在这里插入图片描述
注意插入元素会使指向容器的迭代器、引用和指针失效!!!

①、push_back和emplace的关系
push_back是直接将对象的拷贝插入容器
emplace是将对象构造函数的参数传递进容器,然后容器在使用构造函数构造相应的对象。

②、insert函数
insert的第一个参数为迭代器。在该迭代器之前添加新元素。
返回值为新添加的第一个元素的迭代器。可以使用该返回值循环的插入新元素。

③、可以使用insert函数实现push_front函数的功能
在这里插入图片描述
使用insert函数,传入begin迭代器

2、访问元素

在这里插入图片描述
①、访问元素返回的是引用,对该引用的修改直接影响到容器里面对应值的改变

②、c.back返回的是最后一个元素,而c.end返回的是最后一个元素的后一个位置的迭代器
在这里插入图片描述
③、推荐使用at函数访问
如果使用at成员函数进行访问,当下标非法时,会有报错提醒。
而使用一般的下标运算符访问时,非法时不会报错
在这里插入图片描述

3、删除元素

在这里插入图片描述
注意迭代器失效问题!!

erase函数的返回值:
指向最后一个被删除元素之后元素的迭代器。可以利用它进行循环删除

4、特殊的forward_list操作

在这里插入图片描述

5、改变容器的大小

可以用resize来增大或缩小容器
在这里插入图片描述
在这里插入图片描述

6、容器操作可能会使迭代器、引用、指针失效

在这里插入图片描述
在这里插入图片描述
使用失效的迭代器、指针或者引用是严重的运行时错误!
使用迭代器(或指向容器元素的指针或引用)时,最小化要求迭代器必须保持有效的程序片段是一个好的方法。

①、不要保存end返回的迭代器
在这里插入图片描述
需要在每次插入操作后重新调用end()

9.4 vector对象是如何增长的

vector对象在每次存储的元素超出限制时,会申请一块比新加入元素更大的内存空间,以备后续添加新元素。
在这里插入图片描述
size指的是当前有多少个元素
capacity指的是容器的容量,最大可以容纳多少个元素。

9.5 额外的string操作

string本身也是一个顺序容器,之前介绍的公共方法也适合它。而这里介绍只适用于string的方法

1、构造string的其它方法
在这里插入图片描述
当用字符数组构造字符串时,必须以空字符结尾
在这里插入图片描述

2、substr

在这里插入图片描述

3、改变string的其它方法

在这里插入图片描述
①、replace是erase和insert的组合方法
在这里插入图片描述
先调用erase把原来的删除了,在调用insert将新元素添加到指定位置

3、string的搜索操作

在这里插入图片描述
①、find_first_of系列函数函数十分有用
在这里插入图片描述
相当于给一个字母表,返回字符串中出现字母表元素的第一个位置

4、数值转换

在这里插入图片描述
字符串和数字表示的二进制模式不同,需要通过特定函数才能实现转换。

在这里插入图片描述
需要引入头文件string
函数在std命名空间之下

9.6 容器适配器

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/youyadefeng1/article/details/114122460