C++ STL(四)容器介绍

容器:用来管理和存储一组元素的数据集合,

所有STL容器内部都提供默认构造函数和默认拷贝构造函数,当容器中加入元素时,内部会进行值拷贝,而不是引用

所有STL容器都提供了一些相同的操作方法,比如:

size()   返回容器中元素个数

empty()  容器是否为空

c1 == c2   比较二个容器中所有元素是否相同

c1 != c2    比较二个容器中是否有不相同的元素

c1 = c2    把另一个容器c2中所有元素赋值给容器c1

容器的种类:

序列式容器: 以线性的方式来存储一组元素,元素的位置与元素值本身没有关系,可以根据插入位置指定插入,但是不具备自动排序功能

vector(动态数组)  deque(双端队列) list(双向链表)

关联式容器: 以平衡二叉的方式来存储一组元素,元素的位置是经过排序的,默认以升序排序,不能在指定位置进行插入

set  mulitset  map multimap

各个容器的特点:

名个容器的选择:

1.比如存储游戏得分,而得分需要进行排序,那具备自动排序功能的就set和map,

但是我们又不需查找,那此时set就符合我们的需求

2.比如存储学生考试成绩,而学生考试成绩有个ID号,以及学生信息,学生考试成绩需要根据分数进行自动排序,

并且需要根据学生ID号查询学生信息,此时满足自动排序并且能根据指定Key(学生ID号)查询到学生信息的容器只有map..

3.比如排队购票系统,前面的人走了需要移除容器中的头部元素,而后面的人来了需要从尾部插入元素。不需要自动排序及快速查找,

此时适合的就剩下vector和deque以及list, 而vector移除头部元素虽然可以,但是需要移动大量的数据,效率低。

同样的list也可以,而我们仅仅需要的是头部和尾部快速插入删除, 并不需要改变容器中其它元素,以够用原则来衡量,deque最适合.

4.比如公交车乘客系统,随时有乘客要下车需要从容器任意位置进行删除,同样不需要自动排序和查询,此时适合的就剩下vector和deque以及list。

vector适合尾部快速插入删除,而deque适合头部和尾部快速插入删除,任意位置插入删除最合适的只有list

5. 比如存储日志,不需要自动排序也不需要查询,有新日志时插入容器尾部,不需要从头部或者任意位置插入,需要快速的清空容器中所有元素,

此时vector是最合适的选择

 

总之根据不同的场景选择不同的容器,发挥每种容器的特点,效率同等的情况下功能够用就好

posted @ 2019-12-24 17:11  SmallOverFllow  阅读(279)  评论(1编辑  收藏  举报