【STL】STL各常用容器特点、STL各容器使用时机、STL容器共性机制、deque、stack、queue

对STL中deque、stack、queue、list、Set、Map各容器的特点对比,使用时机,共性机制的总结,以方便于日后个容器的使用。
自我感觉本博客STL分类中的各个博客能让你了解并会使用SLT中的几乎一切基础知识。

一、STL各常用容器特点

(1) deque双端数组

操作特点:在两端插入和删除效率都比较高,在指定位置插入,也会引起数据元素的后移,支持随机访问。(用的少)
deque分段连续内存空间

(2) stack容器

规则:先进后出 ;;不能遍历,不提供迭代器,也不支持随机访问。

While(!stack.empty()){
		Cout<<stack.top()<<endl;
		Stack.pop();
}

(3) queue队列

规则:先进先出
不能遍历,不提供迭代器,也不支持随机访问

While(!queue。empty()){
		Cout<<queue.frout()<<endl;
		Queue.pop();
}

(4) list容器

非常常用 STL中双向链表
在任何位置插入和删除效率都比较好,因为插入和删除时候相对于数组来说,不需要移动元素
缺点:不支持随机访问。非连续的内存空间,所以说为了保存结点和结点之间的前驱和后继的关系,需要提供额外的空间开销
自己提供了sort()方法,为什么?因为不支持随机访问,如果使用算法提高平的sort,效率会不稳定。
Find() 你要清楚,查找基础数据类型、查找对象、提供回调(条件)

(5) 对组pair

将两个值合并成一个值

Pair<string,int>pair1;
Make_pair(“aaa”,1);
Pair3=pair1;

在这里插入图片描述

二、STL容器使用时机

(1)Vector的使用场景:

比如软件历史操作记录的存储,我们经常要查看历史记录,比如上一次的记录,上上次的记录,但却不会去删除记录,因为记录是事实的描述。

(2)Deque的使用场景:

比如排队购票系统,对排队者的存储可以采用deque,支持头端的快速移除,尾端的快速添加。如果使用vector,则头端移除时,会移动大量的数据,速度慢。

Vector和deque的比较

1》 vector.at()比deque.at()效率高,比如vector.at(0)是固定的,的确的开始位置却是不固定的。
2》 如果大量释放操作的话,vector花的时间更少,这跟二者的内部实现有关。
3》 Deque支持头部的快速插入和快速移除,这是deque的优点

(3)List的使用场景:

比如公交车乘客的存储,随时可能有乘客下车,支持频繁的不确定位置元素的移除插入。

(4)Set的使用场景:

比如对手机游戏的个人得分记录的存储,存储要求从高到低分的顺序排列。

(5)Map的使用场景:

比如按ID号存储十万个用户,想要快速要通过ID查找对应的用户。
二叉树的查找效率,这时就体现出来了。如果是vector容器,最坏的情况下可能要遍历完整个容器才能找到该用户。

三、STL容器共性机制

STL容器所提供的都是值(value)寓意,而非引用(reference)寓意,也就是说当我们给容器中插入元素的时候,容器内部实施了拷贝动作,将我们要插入的元素再另行拷贝一份放入到容器中,而不是将元数据元素直接放进容器中,也就是说我们提供的元素必须能够被拷贝。
若对象里面没指针类型,那么默认构造,直接进行值拷贝
若对象里面有指针类型,那么需要自己写拷贝构造,并且重载等于号(=)


(1) 除了queue和stack 之外,每个容器都提供可返回迭代器的函数,运用返回的迭代器就可以访问元素。
(2) 通常STL不会抛出异常,需要使用者传入正确参数
(3) 每个容器都提供了一个默认的构造函数和默认的拷贝构造函数
(4) 大小相关的构造方法:1》size()返回容器中元素的个数;2》empty()判断容器是否为空。

发布了57 篇原创文章 · 获赞 28 · 访问量 4123

猜你喜欢

转载自blog.csdn.net/weixin_41747893/article/details/102959517