导图社区 C Primer第九章
C Primer第九章阅读思维导图包括顺序容器概述、容器库概述以及顺序容器操作这三部分。对此感兴趣的小伙伴可以收藏观看。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
C++ Primer 第九章-前三节
顺序容器概述
选择容器基本原则
如果不确定选择哪种容器,那么在程序中只使用vector和list公共的操作
使用迭代器,不使用下标操作,避免随机访问
容器库概述
迭代器
迭代器范围的概念是标准库的基础
end 不能 在begin之前
使用左闭右开的编程假定
不包含end所指的位置
容器类型成员
begin和end成员
当不需要写访问时,应使用cbegin和cend 其中c代表cosnt
与const指针和引用类似,可以将一个普通的iterator转换为对应的const_iterator。反之不成立
容器定义和初始化
每一个容器都定义了一个默认构造函数,除了array外, 其他容器默认构造函数都创建一个指定类型的空容器,且都可以接收指定容器大小
将一个容器初始化为另一个容器的拷贝
两种方式: ① 直接拷贝整个容器 ② 拷贝由一个迭代器对指定的元素范围
两个容器的容器类型和元素类型都必须相同
不过当传递迭代器参数来拷贝一个范围时,就不要求容器类型相同 新容器和原容器元素类型也可以不同,只要拷贝的元素能转换即可
列表初始化
与顺序容器大小相关的构造函数
只有顺序容器的构造函数才接收大小参数,关联容器并不支持
如果元素类型时内置类型或由默认构造函数的类类型,则只要为构造函数提供一个容器大小参数即可 如果元素类型没有默认构造函数,除了大小参数外,还要显式指定一个元素初始值
标准库array具有固定大小
定义一个array,除了元素类型,还需要指定容器大小
array要求初始值类型与创建容器类型相同,大小也要相同,大小是array的一部分
赋值和swap
使用assgin(仅顺序容器)
允许从一个不同但是相容的类型赋值,或者从容器的一个子序列赋值
也可以接受一个整型值和元素值,用以指定数目并且具有相同值替代容器原有的元素
使用swap
除array外,swap不对任何元素进行拷贝、删除或者插入操作,因此可以保证在常数时间内完成
除string外,指向容器的迭代器、指针、引用在swap操作之后都不会失效
和其他容器不同,swap两个array会真正交换它们的元素
使用非成员版本的swap是一个好习惯
容器大小操作
size、max_size
关系运算符
每个容器都支持相等运算符,除了无序容器外的所有容器都支持> < <= >=
容器关系运算符使用元素的关系运算符完成比较
顺序容器操作
添加元素
使用push_back(除了array,forward_list都支持)
容器元素是拷贝
使用push_front
list forward_list deque容器支持
deque首尾之外插入元素会很耗时
在容器中特定位置添加元素
vector deque list string都支持insert成员
元素插入到vector deque string中任何位置都是合法的,然后这样做可能很耗时
插入范围内元素——insert
使用insert的返回值
使用emplace操作
emplace_front——push_front
emplace——insert
emplace_back——push_back
insert push是将对象拷贝到容器 而emplace是将参数传递给元素类型的构造函数
emplace函数在容器中直接构造函数,传递给emplace函数的参数必须与元素类型的构造函数相匹配
访问元素
所有顺序容器都有front成员函数,而除了forward_list之外的顺序容器都有一个back成员函数
访问成员函数返回的是引用
下标操作和安全的随机访问
at
删除元素
pop_front和pop_back成员函数
从容器内部删除一个元素——erase
删除多个元素
clear
erase(elem1,elem2)
特殊的forword_list操作
处理forward_list中添加或者删除元素,必须关注两个迭代器: 一个是指向我们要处理的元素,一个是指向其前驱
改变容器大小
如果容器保存的类类型元素,且resize向容器中添加新元素 则必须提供初始值,或者元素类型必须提供一个默认构造函数
容器操作可能是迭代器失效——
编写改变容器的循环程序
不要保存end返回的迭代器
操作vector string元素,或者deque首元素之外任何位置 添加/删除元素,原来end返回的迭代器总会失效
如果在循环体中插入/删除deque string vector 中的元素, 不要缓存end返回的迭代器
特别是string vector deque元素
容器操作表9.2