关于STL的一些总结1:vector,queue,stack

时间:2021-10-24 19:42:43

我就是一个小蒟蒻而已
STL我学的只是九牛一毛(希望各位大佬教教我)
自己也学习了一下STL,我大致总结一下我自己平时是如何使用STL的
我写下的也并非是该容器的全部操作,只是我平时用的较多的操作

vector

vector是不定长数组(数学里面vector叫做向量),是节约内存的好东西

使用

vector<type> Name;    //定义一个不定长数组
A.push_back(x); //将元素x插入在A的最后
A.pop_back(); //将最后一个元素删除
A.insert(x,pos); //将元素x插入在pos位置
A.erase(pos); //将pos位置的元素删除
A.erase(pos1,pos2); //将pos1和pos2之间的元素全部清空
A.resize(n); //将A的大小定为n
A.size(); //返回A的元素个数
A.begin(); //返回一个迭代器,指向A的第一个元素的位置
A.end(); //返回一个迭代器,指向A的最后一个元素的位置

用途

一般vector的用途提交广,甚至可以直接代替普通的数组来使用,又因为它并不需要提前定义size,是解决空间的好东西
1.代替邻接表,直接使用vector来存边
2.模拟链表(效率较低)
3.代替普通数组的使用

注意事项

vector 如果在中间 插入/删除 了一个数,它会自动的把 后面/前面 的数 向后/向前 挪动,导致浪费大量时间,如果需要这些操作并且数据范围较大,建议手写链表或者使用其他数据机构。

举例

(暂无)

queue

queue是队列(FIFO),就是队列,先进先出的队列

使用

queue<type> Name;   //定义一个队列
Q.push(x); //将x放入队列中
Q.front(); //取出队列的头元素
Q.pop(); //将队列的头元素出队
Q.empth(); //判断队列是否为空,返回布尔值

用途

其实吧,个人觉得queue的用途不是非常广,一般就是自己懒得手写队列的时候使用(比如BFS,拓扑排序等),用于代替循环队列(当然也可以代替普通队列)。

注意事项

queue可以使用任何类型(包括结构体),插入的时候只能够插入同定义类型的元素,弹出的元素也是定义的类型。另外,queue也不是无限大,当里面放了太多的元素也会Re。

举例

(暂无)

stack

stack是栈,就是一个栈。

使用

stack<type> Name;   //定义一个栈
S.push(x); //将元素x压入栈中
S.top(); //取出栈顶元素的值
S.pop(); //弹出栈顶元素
S.empth(); //判断栈是否为空

用途

stack就是一个栈,而且手写栈也非常容易,所以,很少用stack来写程序。

注意事项

如果写stack,一定要随时判断是否为空(S.empty()),否则容易RE。另外,同queue,如果放了太多的元素会RE。

举例

(暂无)

小结

为什么要把这几个东西放在一起来讲呢?
因为这三个东西要么用的比较频繁,要么用的很少
也因为他们的实现比较简单,没有太多讲解的价值,甚至没有专门的题目来讲解如何使用这三个东西,所以就把它们放在了一起 。

vector用的非常广泛,可是略慢于普通数组,用于节约空间。
queue用于简化程序,减少队列的空间。
stack,这个真的没什么用(我从未用过,都是自己手写栈)

接下来的几篇,一定要每一个STL都要专门的配上题目慢慢分析。