C++ - STL常见容器及其常见操作

本文主要记录一下STL中一些常见的容器(包括vector、deque、queue、list、stack、set、map),及其对应的常见的操作,不涉及更深层次原理性的知识。方便以后使用、查阅。

1、vector

vector 容器结构示意图:

 vector:顺序存储容器,和数组非常相似,也被称为单端数组。只能从尾部增加删除元素。

vector 常见操作:

2、deque

deque 容器结构示意图:

deque:顺序存储容器,两端都可插入与删除,也被称为双端数组。虽然都是顺序存储容器,但是vector访问元素的速度要比deque快

deque内部工作原理:

 deque常见操作:

3、queue

queue 容器结构示意图:

queue:先进先出(First In First Out, FIFO)的存储容器(两端),只能从尾部插入、头部删除。

queue常见操作:

4、list

list 容器结构示意图:

 list: 非连续的存储空间,是一个双向循环链表,动态存储分配。

list 常见操作:

5、stack

stack 容器结构示意图:

stack: 一种先进后出(First In Last Out, FILO)的数据结构,只有一个出口,只能在栈顶插入与删除。

stack 常见操作:

6、set/multiset

set: 集合,一种关联性容器。底层是红黑树实现的。

特点:

1)、所有元素在插入时自动被排序;

2)、set不允许容器中有重复的值,multiset允许容器中有重复的元素;

set常见操作:

7、map/multimap

map: 一种关联性容器。底层是红黑树实现的。

特点:

1)、map中所有的元素都是pair,其中pair第一个元素为key(键值),第二个元素为value(实值);

2)、所有元素都会根据元素的key(键值)自动排序;

3)、map中不允许有重复的key值元素,multimap中允许有重复的key值元素;

map 常见操作:

 8、几种容器的对比

名称类型存储结构支持迭代器增加元素删除元素支持find随机访问
vector顺序容器

连续存储空间

(数组)

支持

尾部增加

(push_back)

尾部删除

(pop_back)

自己不支持find支持快速随机访问
deque顺序容器

连续存储空间

(双端数组)

支持

尾部增加

(push_back)

头部增加

(push_front)

尾部删除

(pop_back)

头部删除

(pop_front)

自己不支持find支持快速随机访问
queue顺序容器

连续存储空间

(FIFO)

不支持

队尾增加

(push)

队头删除

(pop)

不支持不支持
list顺序容器

非连续存储空间

(双向循环链表)

支持

尾部增加

(push_back)

头部增加

(push_front)

尾部删除

(pop_back)

头部删除

(pop_front)

自己不支持find

不支持

stack顺序容器

连续存储空间

(FILO)

不支持

栈顶增加

(push)

栈顶删除

(pop)

不支持不支持
set关联容器红黑树支持inserterase支持——
map关联容器红黑树支持

insert

[] 赋值

erase支持——

PS:

  1. 对于自己不支持find(即,成员函数没有find)的,可以使用泛型算法进行find;
  2. 只有list自己含有sort成员函数,其它能排序(vector、deque)的容器只能调用泛型算法;
  3. 对于  erase 操作,对于序列容器vector,deque来说,使用erase(itertor)后,后边的每个元素的迭代器都会失效,但是后边每个元素都会往前移动一个位置,但是erase会返回下一个有效的迭代器;     对于关联容器map set来说,使用了erase(iterator)后,当前元素的迭代器失效,但是其结构是红黑树,删除当前元素的,不会影响到下一个元素的迭代器,所以在调用erase之前,记录下一个元素的迭代器即可。     对于list来说,它使用了不连续分配的内存,并且它的erase方法也会返回下一个有效的iterator
  • 10
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值