c++ 11新特性

一、智能指针shared_ptr和unique_ptr
详见

二、NULL、0、nullptr的区别
详见

三、STL
1、vector
1.1、是可变大小数组的序列容器。
1.2、采用的连续存储空间来存储元素。可下标访问元素,和数组一样高效。但是又不像静态数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。
1.3、vector的存储分配策略是以2的n次方分配,如插入3个元素的时候capacity为4,插入5个元素的时候capacity为8。
1.4、与其它动态序列容器相比(deques, lists and forward_lists), vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。比起lists和forward_lists统一的迭代器和引用更好

2、list
1.1、是数据结构中的双向链表实现的
1.2、它的内存空间可以是不连续的。因此只能通过指针来进行数据的访问,这个特点使得它的随机存取变的非常没有效率,需要遍历中间的元素,搜索复杂度O(n)
1.3、由于链表的特点,它可以以很好的效率支持任意地方的删除和插入。

总结:什么时候用vector,什么时候用list? 高效的随机存取,而不在乎插入和删除的效率,使用vector; 需要大量的插入和删除,而不关心随机存取,则应使用list。

3、deque
1.1、deque是顺序容器的一种,底层是一个双向链表。
1.2、deque 容器擅长在序列尾部和头部添加或删除元素(时间复杂度为O(1)),而不擅长在序列中间添加或删除元素。底层存储机制较为复杂,由若干连续小段空间通过指针连接而成,
1.3、deque 容器中存储元素并不能保证所有元素都存储到连续的内存空间中。
1.4、 随机访问方便,即支持[ ]操作符和vector.at()一样,但速度比vector稍慢。
总结:当需要向序列两端频繁的添加或删除元素时,应首选 deque 容器。

4、queue
1.1、queue支持先进先出。
1.2、queue允许新增元素、移除元素、从最底端加入元素、取得最顶端元素,但不允许遍历行为。
只有queue顶端的元素,才有机会被外界去用,也不提供迭代器。

5、stack
1.1、stack支持先进后出
1.2、stack允许新增元素、移除元素、从顶端加入元素、取得最顶端元素,删除最顶端元素,但不允许遍历行为,只有stack顶端的元素,才有机会被外界使用,不提供迭代器。
总结:queue和stack区别在于queue是先进先被外界访问,先出队列,stack是先进后出,先进后被外界访问,后出stack。

6、string
1.1、
总结:以上vector、list、deque、queue、stack、string 都是顺序容器。

6、set
1.1、set中不允许出现键值重复,所有的元素都会被自动排序,元素的只有key没有value,value就是key,不能通过
迭代器来改变set的值,因为set的值就是键。
1.2、set的底层实现原理是平衡检索二叉树(红黑树),在插入元素的时候,会把元素根据红黑树的排序放在
适当的位置,始终保持左节点小于根节点,右节点大于根节点。还保证根节点的左子树和右子树高度一样。
13、查找元素的时间复杂度O(logN)

7、multiset
1.1、multiset相对于set来说,区别就是multiset允许键值重复,在multiset中调用的是RBTree的insert_equal函数,其他的基本与set相同

8、map
1.1、 map的底层实现原理是平衡检索二叉树(红黑树),在插入元素的时候,会把元素根据红黑树的排序放在
适当的位置,始终保持左节点小于根节点,右节点大于根节点。还保证根节点的左子树和右子树高度一样
1.2、所有元素都是键+值存在
1.3、不允许键重复
1.4、所有元素是通过键进行自动排序的
1.5、map的键是不能修改的,但是其键对应的值是可以修改的

9、multimap
1.1、multimap和map的关系就跟multiset和set的关系一样,multimap允许键的值相同,因此在插入操作的时候用到insert_equal(),除此之外,基本上与map相同

总结: set 和 map的实现原理都是红黑树,set的每一个value就是键值,并且是唯一的,不允许修改,map的是
key velue的存在,一个key对应一个value,key不可以修改,value是可以修改的, map和set的插入、查看 、删除
时间复杂度都是O(logN)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值