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是最合适的选择