C++STL之deque的使用

參考別人的哈,特此聲明。

#include <deque>
/*
deque雙向隊列是一種雙向開口的連續線性空間,可以高效的在頭尾兩端插入和刪除元素,deque在接口上和vector非常相似
deque的實現比較複雜,內部會維護一個map(注意!不是STL中的map容器)即一小塊連續的空間,該空間中每個元素都是指針,
指向另一段(較大的)區域,這個區域稱爲緩衝區,緩衝區用來保存deque中的數據。
因此deque在隨機訪問和遍歷數據會比vector慢。具體的deque實現可以參考《STL源碼剖析》,
當然此書中使用的SGI STL與VS2008所使用的PJ STL的實現方法還是有區別的。

Deque成員函數

 函數 描述
 c.assign(beg,end)將[beg; end)區間中的數據賦值給c。
 c.assign(n,elem)   將n個elem的拷貝賦值給c。
 c.at(idx)  傳回索引idx所指的數據,如果idx越界,拋出out_of_range。
 c.back()   傳回最後一個數據,不檢查這個數據是否存在。
 c.begin()  傳回迭代器重的可一個數據。
 c.clear()  移除容器中所有數據。
 deque<Elem> c    創建一個空的deque。
 deque<Elem> c1(c2)   複製一個deque。
 Deque<Elem> c(n)    創建一個deque,含有n個數據,數據均已缺省構造產生。
 Deque<Elem> c(n, elem)   創建一個含有n個elem拷貝的deque。
 Deque<Elem> c(beg,end)   創建一個以[beg;end)區間的deque。
 c.~deque<Elem>()    銷燬所有數據,釋放內存。



 c.empty()  判斷容器是否爲空。
 c.end()    指向迭代器中的最後一個數據地址。
 c.erase(pos) 刪除pos位置的數據,傳回下一個數據的位置。
 c.erase(beg,end)    刪除[beg,end)區間的數據,傳回下一個數據的位置。

 c.front()  傳回地一個數據。
 get_allocator  使用構造函數返回一個拷貝。
 c.insert(pos,elem) 在pos位置插入一個elem拷貝,傳回新數據位置。
 c.insert(pos,n,elem) 在pos位置插入>n個elem數據。無返回值。
 c.insert(pos,beg,end)  在pos位置插入在[beg,end)區間的數據。無返回值。


 c.max_size()   返回容器中最大數據的數量。
 c.pop_back()   刪除最後一個數據。
 c.pop_front()  刪除頭部數據。
 c.push_back(elem)  在尾部加入一個數據。
 c.push_front(elem) 在頭部插入一個數據。
 c.rbegin() 傳回一個逆向隊列的第一個數據。
 c.rend()   傳回一個逆向隊列的最後一個數據的下一個位置。
 c.resize(num)  重新指定隊列的長度。
 c.size()   返回容器中實際數據的個數。
 C1.swap(c2)
 Swap(c1,c2)    將c1和c2元素互換。
 同上操作。


*/

//雙向隊列 deque
//by MoreWindows http://blog.csdn.net/morewindows
#include <deque>
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
    deque<int> ideq(20); //Create a deque ideq with 20 elements of default value 0
    deque<int>::iterator pos;
    int i;

    //使用assign()賦值  assign在計算機中就是賦值的意思
    for (i = 0; i < 20; ++i)
        ideq[i] = i;

    //輸出deque
    printf("輸出deque中數據:\n");
    for (i = 0; i < 20; ++i)
        printf("%d ", ideq[i]);
    putchar('\n');

    //在頭尾加入新數據
    printf("\n在頭尾加入新數據...\n");
    ideq.push_back(100);
    ideq.push_front(i);

    //輸出deque
    printf("\n輸出deque中數據:\n");
    for (pos = ideq.begin(); pos != ideq.end(); pos++)
        printf("%d ", *pos);
    putchar('\n');

    //查找
    const int FINDNUMBER = 19;
    printf("\n查找%d\n", FINDNUMBER);
    pos = find(ideq.begin(), ideq.end(), FINDNUMBER);
    if (pos != ideq.end())
        printf("find %d success\n", *pos);
    else
        printf("find failed\n");

    //在頭尾刪除數據
    printf("\n在頭尾刪除數據...\n");
    ideq.pop_back();
    ideq.pop_front();

    //輸出deque
    printf("\n輸出deque中數據:\n");
    for (pos = ideq.begin(); pos != ideq.end(); pos++)
        printf("%d ", *pos);
    putchar('\n');

    system("pause");
    return 0;
}















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