[转载] C++常见容器及其操作

        本文主要记录一下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:

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


原文链接:https://blog.csdn.net/bailang_zhizun/article/details/118938955

如有侵权请及时联系我删除:qq:1694088471

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值