C++ primer 笔记9. 顺序容器
概述
- 顺序容器类型:
容器库
- 迭代器类型:
- 容器初始化:
- array:具有固定大小,定义时,需要指定容器大小
- assign(顺序容器):
array不支持assign以及花括号包围的值列表进行赋值
- swap:
交换两个容器的内部数据结构,元素本身并未交换,操作很快
除string外,迭代器、引用和指针都不会失效
swap array会交换它们的元素,因此时间与array中元素的数目成正比
swap array后,指针,引用和迭代器绑定的元素不变,值发生了交换
- 容器大小操作:
- 关系运算符:类型相同,且定义了相应的比较运算符
顺序容器
- 添加元素:
用一个对象初始化容器/插入到容器中时,放入容器中的是对象值的拷贝
- 元素访问:
forward_list迭代器不支持递减操作
- 删除元素:
- 改变容器大小:
可能导致vector, string, deque所有迭代器、指针和引用失效
- deque容器操作对迭代器的影响:
删除vector, string中元素会使删除点之后的迭代器、引用、指针失效
向vector, string添加元素,存储空间可能重新分配,所有迭代器、引用、指针失效
向vector, string添加元素,存储空间没有重新分配,插入位置之后的迭代器、引用、指针失效
插入/删除deque中除首尾位置之外的任何元素都会使迭代器、引用、指针失效
在deque首尾位置添加元素,迭代器会失效,但引用和指针不会失效
删除deque尾元素,尾后迭代器失效;删除首元素不受影响
list, forward_list迭代器、引用、指针不会失效,删除元素会导致尾后迭代器失效
- forward_list操作:
添加删除元素是通过改变给定元素之后的元素来完成
vector对象增长
当需要获取新的内存空间,vector和string会分配比新空间需求更大的内存空间
只有当vector容量满,或者调用resize, reserve函数时,vector才会重新分配内存空间
- 管理容量函数:
额外string操作
- 其他构造函数:
- substr操作:
- 修改操作:
- 搜索:
- compare函数:
- 数值转换:
容器适配器
stack/queue基于deque实现
priority_queue基于vector实现
适配器:使某种事物的行为看起来像另外一种事物
- 支持操作:
- 定义:
- 栈:
- 队列: