文章目录
- 1. 常见的 STL 容器
- 2.vector 和 list 的区别
- 3. vector 的底层原理
- 4. push_back() 和 emplace_back() 区别
1. 常见的 STL 容器
-
🍎①序列容器
vector(向量):是一个动态数组实现,提供高效的随机访问和在尾部进行插入/删除操作。
list(链表):是一个双向链表实现,支持在==任意位置进行插入/删除操作,但不支持随机访问。

-
🍎②关联容器
set(集合):是一个有序的集合,不允许重复元素,支持快速查找、插入、删除。

-
🍎③容器适配器
stack(栈):是一个基于底层容器的栈实现,满足后进先出的规则。
queue(队列):是一个基于底层容器队列的实现,满足先进先出的规则。
2.vector 和 list 的区别
- 🍎
vector底层实现是数组,list底层是双向链表。 - 🍎
vector是顺序存储,支持随机访问,list不行。 - 🍎
vector随机访问性好,插入和删除的效率较低;list不支持随机访问,插入和删除效率较高。 - 🍎
vector在中间节点进行插入删除会导致内存拷贝,list不会 - 🍎
vector一次性分配好内存,不够时才进行翻倍扩容;list每次插入新的节点都会进行内存申请
3. vector 的底层原理
vector在堆中分配了一段连续的内存空间来存放元素。
三个迭代器
(1)first:对象的起始字节位置
(2)last:指向当前最后一个元素的末尾字节
(3)end:指向整个vector容器所占用内存空间的末尾字节
4. push_back() 和 emplace_back() 区别
- 🐧
push_back用于在容器的尾部添加一个元素
container.push_back(value);
container是一个支持push_back操作的容器,例如:std::vector、std::list等,而value是要添加的元素的值。
- 🐧
emplace_back用于在容器的尾部直接构造一个元素
container.emplace_back(value);
其中 container 是⼀个⽀持 emplace_back 操作的容器,⽽ args 是传递给元素类型的构造函数的参数。
与push_back 不同的是, emplace_back 不需要创建临时对象,⽽是直接在容器中构造新的元素。
🍎两者的区别:
push_back接受一个已存在的对象或一个可转换为容器元素类型的对象,并将其复制或移动到容器中。emplace_back直接在容器中构造元素,不需要创建临时对象。
emplace_back通常比push_back更高效,因为它避免了创建和销毁临时对象的开销。
emplace_back的参数是传递给元素类型的构造函数的参数,而push_back直接接受一个元素。



















