參考別人的哈,特此聲明。
#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;
}
C++STL之deque的使用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.