C++ 容器详解

本文详细介绍了C++中的线性容器如vector、list和deque,包括预分配内存和初始化的方式。同时讨论了容器适配器在特定场景下的应用,如用两个栈实现一个队列。此外,还讲解了关联容器,如红黑树实现的set和map,其在数据查找上的优势。最后总结了线性容器和关联容器的选择策略。
摘要由CSDN通过智能技术生成

首先说一下六大组件:

算法,容器,迭代器,仿函数(函数对象),分配器,适配器

简述:

线性容器:

vector(向量): 好比C语言中数组   顺序表  seqtable
(a)内存连续     支持[]运算符   下标访问
(b)动态内存管理    自动扩容
(c)通过分配器来管理动态内存 预分配内存空间 减少动态内存管理的额外开销
(d)可以随机位置做插入和删除,但只有在接近末尾进行插入和删除时才是高效的

预分配内存和初始化
vector v3(10); //10个int元素,初始值为0
vector v4(10,1024); //10个int元素,初始值全为1024
vector v5(10); //10个Stu对象,通过无参构造函数初始化一个对象 ,然后通过拷贝构造函数
//有的编译器 直接全部调用无参构造
vector v6(10,s); //10个Stu对象,通过拷贝构造初始化
对象如果放入到容器中,一般需要无参构造
vector v7(beg,end); //[beg,end)区间的元素来构造vector

list(列表):  
	底层实现双向链表
(a)内存可以不连续  离散的结点    指针   不支持随机访问
(b)在任何位置插入和删除拥有O(1)的时间复杂度
(c)不能用全局的sort进行排序  全局的sort函数只支持连续内存的容器
    有成员sort 
(d)list删除之后,迭代器会失效   必须接收返回值

deque(双端队列):
(a)内存连续,支持下标访问和随机迭代
(b)相对vector而言,在首尾两端都能进行高效地插入和删除
(c)因此需要在首尾两端都维护内存的开放性,其分配器的实现略加复杂
	空间利用率会比vector低
	时间复杂度会比vector要高一些
(d)对比vector多了push_front()/pop_front(),少了reserve
(e)[index]  deque下标访问进行两次下标访问 

容器适配器(用上面三个线性容器适配了容器的某些功能):

stack(堆栈): 先进后出  后进先出
queue(队列): 先进先出  后进后出
priority_queue(优先队列): "优"者先出

有一个经典的题目:用两个栈实现一个队列

class Solution
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HOVL_C++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值