C++STL之雙端隊列Deque

deque雙端隊列容器與vector很類似,採用線性表順序存儲結構。但與vector區別,deque採用分塊的線性存儲結構來存儲數據,每塊的大小一般爲512B,將之稱爲deque塊,所有的deque塊使用一個map塊進行管理,每個map數據項記錄各個deque塊的首地址,這樣的話,deque塊在頭部和尾部都可以插入和刪除。而不需要移動任何元素,而不需要移動其他元素(使用push_back()方法在尾部插入元素,會擴張隊列,而使用push_front()方法在首部插入元素和使用insert()方法在中間插入元素,只是將原位置上的元素進行覆蓋,不會增加新元素)一般來說,當考慮到容器元素的內存分配策略和操作的性能時deque相當於vector更有優勢。
在這裏插入圖片描述
*創建deque對象
與vector類似

*插入元素
使用push_back()方法從尾部插入元素,會不斷擴張隊列。

#include<iostream>
#include<deque>
using namespace std;

 int main()
 {
    deque<int> d;
    d.push_back(1);
    d.push_back(2);

    cout<<d[0]<<" : "<<d[1]<<endl;

    return 0;
 }

從頭部插入元素,不會增加新元素,只將原來有的元素覆蓋。

#include<iostream>
 #include<deque>
 using namespace std;

 int main()
 {
    deque<int> d;

    d.push_back(1);
    d.push_back(2);
    d.push_back(3);
    d.push_front(10);//d.insert(d.begin()+1, 10);
    d.push_front(20);//d.insert(d.begin()+2, 20);

    cout<<d[0]<<" "<<d[1]<<" "<<d[2]<<endl;

    return 0;
 }
--------------------- 
作者:xiaowei_nbu 
來源:CSDN 
原文:https://blog.csdn.net/caicai_zju/article/details/49227927 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

*遍歷

#include<iostream>
 #include<deque>
 using namespace std;

 int main()
 {
    deque<int> d;
    d.push_back(1);
    d.push_back(2);
    d.push_back(3);

    for(int i = 0; i < d.size(); i ++)
        cout<<d[i]<<" ";
    cout<<endl;

    deque<int>::iterator it;
    for(it = d.begin(); it != d.end(); it ++)
        cout<<*it<<" ";
    cout<<endl;

    deque<int>::reverse_iterator rit;
    for(rit = d.rbegin(); rit != d.rend(); rit ++)
        cout<<*rit<<" ";
    cout<<endl;

    return 0;
 }

*刪除元素
可以從雙端隊列的手部,尾部,中部刪除元素,並可以清空雙端隊列容器

#include<iostream>
#include<deque>
using namespace std;

int main()
{
    deque<int> d;
    for(int i = 1; i < 6; i ++)
        d.push_back(i);

    d.pop_front();
    d.pop_front();

    deque<int>::iterator it;
    for(it = d.begin(); it != d.end(); it ++)
        cout<<*it<<" ";
    cout<<endl;

    d.pop_back();
    for(it = d.begin(); it != d.end(); it ++)
        cout<<*it<<" ";
    cout<<endl;

    d.erase(d.begin()+1);
    for(it = d.begin(); it != d.end(); it ++)
        cout<<*it<<" ";
    cout<<endl;

    d.clear();
    cout<<d.size()<<endl;

    return 0;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章