国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++ STL入門教程(3) deque雙向隊列使用方法

2020-01-26 13:57:26
字體:
來源:轉載
供稿:網友

一、簡介

deque(Double Ended Queues,雙向隊列)和向量很相似,但是它允許在容器頭部快速插入和刪除(就像在尾部一樣)。

二、完整程序代碼

/*請務必運行以下程序后對照閱讀*/  #include <deque> #include <iostream> #include <algorithm> #include <stdexcept> using namespace std;  void print(int num) {   cout << num << " "; }  int main() {   //1. 初始化   deque<int> v;   deque<int>::iterator iv;    v.assign(10, 2);//將10個值為2的元素賦到deque中   cout << v.size() << endl; //返回deque實際含有的元素數量   cout << endl;    //2. 添加   v.push_front(666);   for (int i = 0; i < 10; i++)     v.push_back(i);   for_each(v.begin(), v.end(), print);//需要#include <algorithm>   cout << endl;   cout << v.size() << endl;   cout << endl;    //3. 插入及遍歷、逆遍歷   v.insert(v.begin() + 3, 99);   v.insert(v.end() - 3, 99);   for_each(v.begin(), v.end(), print);   cout << endl;   for_each(v.rbegin(), v.rend(), print);//在逆序迭代器上做++運算將指向容器中的前一個元素   cout << endl;    //一般遍歷寫法   for(iv = v.begin(); iv != v.end(); ++iv)     cout << *iv << " ";   cout << endl;   cout << endl;    //4. 刪除   v.erase(v.begin() + 3);   for_each(v.begin(), v.end(), print);   cout << endl;   v.insert(v.begin() + 3, 99);//還原    v.erase(v.begin(), v.begin() + 3); //注意刪除了3個元素而不是4個   for_each(v.begin(), v.end(), print);   cout << endl;    v.pop_front();   v.pop_back();   for_each(v.begin(), v.end(), print);   cout << endl;   cout << endl;    //5. 查詢   cout << v.front() << endl;   cout << v.back() << endl;    //危險的做法,但一般我們就像訪問數組那樣操作就行   for (int i = 15; i < 25; i++)     cout << "Element " << i << " is " << v[i] << endl;   //安全的做法   int i;   try   {     for (i = 15; i < 25; i++)       cout << "Element " << i << " is " << v.at(i) << endl;   }   catch (out_of_range err)//#include <stdexcept>   {     cout << "out_of_range at " << i << endl;   }   cout << endl;    //6. 清空   v.clear();   cout << v.size() << endl;//0   for_each(v.begin(), v.end(), print); //已經clear,v.begin()==v.end(),不會有任何結果。    return 0; } 

三、補充

實際上,deque是對vector和list優缺點的結合,它是處于兩者之間的,一種優化了的對序列兩端元素進行添加和刪除操作的基本序列容器。

它允許較為快速地隨機訪問,但它不像vector把所有的對象保存在一塊連續的內存塊,而是采用多個連續的存儲塊,并且在一個映射結構中保存對這些塊及其順序的跟蹤。向deque兩端添加或刪除元素的開銷很小。它不需要重新分配空間,所以向末端增加元素比vector更有效。 

特點:

(1)  隨機訪問方便,即支持[ ] 操作符和vector.at(),但性能沒有vector好;
(2)  可以在內部進行插入和刪除操作,但性能不及list;
(3)  可以在兩端進行入列出列操作;
(4)  相對于verctor占用更多的內存。

參考網址:http://www.cplusplus.com/reference/deque/deque/

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 淄博市| 大冶市| 德令哈市| 连城县| 东乌| 白玉县| 温泉县| 洪湖市| 青神县| 五家渠市| 观塘区| 海兴县| 满洲里市| 辽宁省| 花莲县| 乌恰县| 赫章县| 来宾市| 屏南县| 隆尧县| 仪陇县| 牙克石市| 云梦县| 习水县| 崇文区| 沅江市| 康定县| 永胜县| 那坡县| 上蔡县| 三台县| 曲松县| 江永县| 开封市| 安国市| 无为县| 恩平市| 乃东县| 浪卡子县| 富平县| 剑河县|