C++日记——Day56:容器的说明和简单应用例续

顺序容器:

deque(double end queue):双向开口。相当于动态数组:头部和尾部插入和删除数据头很快;

如果像中间插入元素,那么可能涉及到要移动其他元素,效率会比较低;

分段连续

queue:队列,这是个普通队列,先进先出,后进后出,基本的数据结构

stack:栈(堆栈),先进后出,只有一个开口,只要把的却左边开口封死我们就可以认为它变成了一个stack;

和vector的区别:

vector支持从中间插入与删除元素,虽然效率不高。

stack只支持从栈顶放入与取出元素,这种设计是stack的初衷,deque实际上包含着stack的功能

 

list:队列,这是一个双向链表,不需要各个元素之间的内存连在一起;查找效率不突出,在任意位置插入和删除元素非常迅速;

vector和list的区别:

a、vector类似于数组,它的内存是连续的,list是双向链表,内存空间不连续至少不要求内存是连续的。

b、vector从中间或开头插入元素的效率比较低;但是list的效率非常高;

c、vector当内存不够时会重新找一块内存,对原来内存对象做析构,在找的新内存重新构造对象;

d、vector能够搞笑的随机存取,而list做不到这一点;比如,要访问第5个元素,vector一下就可以访问到,但是,list不行,要从第一个开始找(从第一个数据中找第二个数据的内存地址,到第二个数据中找第三个数据的内存地址)

 

forward_list:单项链表,节省了内存,尤其是元素多的时候,节省的内存非常可观。

 

关联容器(红黑树)

set/map:关联容器,容器内部的实现多为红黑树;我们往这种容器中保存数据时不需要指定数据位置,这种容器会自动的给你加入的元素一个位置。

map:每个元素有两项,是个(键 / 值);一般都是通过key找value;通过key找value特别快。不允许key相同,如果非要让key相同,你要采用mutimap

map<int, string> mymap;
mymap.insert(std::make_pair(1, "老王"));
mymap.insert(std::make_pair(2, "老李"));

mymap.insert(pair<int, string>(3, "老丁"));

auto iter = mymap.find(3);
if(iter != mymap.end()){
    printf("编号为%d,名字%s\n",iter->first, iter->second.c_str());
}

set:不存在键值对的说法,每个元素就是一个value;如果想重复可以使用mutiset

总结:

1、插入时,因为容器找一个适当的插入位置,所以插入的速度可能会慢。

2、但是查找的速度快。

 

无序容器(哈希表)

unordered_set / unordered_multimap 为新版本( hash_set, hash_map....老版本)

优先使用容器里的find如果容器没有自己的find在使用全局find方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值