queue、deque、stack、 list用法区别简介

  • Map

Map是键值对,键Key是唯一不能重复的,一个键对应一个值,值可以重复。 
TreeMap可以保证顺序,HashMap不保证顺序,即为无序的。 
Map中可以将Key和Value单独抽取出来,其中KeySet()方法可以将所有的keys抽取正一个Set。而Values()方法可以将map中所有的values抽取成一个集合。

  • Set

不包含重复元素的集合,set中最多包含一个null元素 
只能用Lterator实现单项遍历,Set中没有同步方法。

  • List

有序的可重复集合。 
可以在任意位置增加删除元素。 
用Iterator实现单向遍历,也可用ListIterator实现双向遍历

  • Queue

Queue遵从先进先出原则。 
使用时尽量避免add()和remove()方法,而是使用offer()来添加元素,使用poll()来移除元素,它的优点是可以通过返回值来判断是否成功。 
LinkedList实现了Queue接口。 
Queue通常不允许插入null元素。

  • Stack

    Stack遵从后进先出原则。 
    Stack继承自Vector。 
    它通过五个操作对类Vector进行扩展,允许将向量视为堆栈,它提供了通常的push和pop操作,以及取堆栈顶点的peek()方法、测试堆栈是否为空的empty方法等 

用法

如果涉及堆栈,队列等操作,建议使用List 

对于快速插入和删除元素的,建议使用LinkedList 

如果需要快速随机访问元素的,建议使用ArrayList

资料引自:http://blog.csdn.net/oLaoHuBuChiRen1/article/details/51127151


queue与deque的区别

                                                queue (先进先出)                         deque(双端队列)
头文件                                       #include <queue>                         #include <deque>
定义                                            queue<double> q;                        deque<double> q;
访问队列中的元素个数                          q.size()                                        q.size()
判断队列空                                          q.empty()                                   q.empty() 
尾部压入新元素                                    q.push(x)                                q.push_back(x)
头部压入新元素                                       EOF                                      q.push_front(x)
弹出队列的第一个元素                           q.pop()                                  q.pop_front()
弹出队列的最后一个元素                          EOF                                     q.pop_back()
访问队首元素                                        q.front()                                      q.begin()
访问队尾元素                                        q.back()                                      q.end()
删除所有元素                                           EOF                                          q.clear()
删除任意位置x                                         EOF                                   q .erase(q.begin() + x)

stack用法:

stack(后进先出)
s.push(x);        入栈
s.pop();           出栈
s.top();            访问栈顶元素
s.empty();       判断栈空

s.size();           访问栈中元素个数


list

begin()和end()                              访问头尾
push_back()和push_front()           插入头尾
empty()                                         辨是否空
clear()                                            清除链表
front()和back()                               弹出头尾
pop_back()和pop_front()               删除头尾
swap()                                            交换链表
reverse()                                         逆置链表 reverse(b.begin(),b.end());
merge()                                          清空置换 a.merge(b); //b变为空,a中元素包含原来a和b的元素
insert()                                           指定插入    a.insert(a.begin(),b.begin(), b.end()); //在a的开始位置插入                                                                                 b从开始到结束所有元素

erase()                               指定删除 a.erase(a.begin(),a.end());

                                                      //将a的从begin()到    end()    之    间    的    元    素删除 

remove()                        删除元素 a.remove(7); //删除a中所有值为7的元素
assign()                            (1)a.assign(n, val):将a中的所有元素替换成n个val元素
                                           list<int>b{1,2,3,4,5};  //注意语法错误  
                                           b.assign(5,10);
           b中的元素变为10, 10, 10, 10, 10
        (2)a.assign(b.begin(), b.end())
   list<int>a{6,7,8,9};
           list<int>b{1,2,3,4,5};
   b.assign(a.begin(),a.end());
           b中的元素变为6,7,8,9
resize() //调用resize(n)将list的长度改为只容纳n个元素,超出的元素将被删除。如果n比list原来的长度长,那么默认超出的部分元素置为0。也可以用resize(n, m)的方式将超出的部分赋值为m。

remove_if()    你猜~


本文大致介绍queue、deque、stack、 list用法区别,若有错误请联系博主更改

猜你喜欢

转载自blog.csdn.net/scar_halo/article/details/79301900