程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> GEEK學習筆記— —STL容器deque

GEEK學習筆記— —STL容器deque

編輯:關於C++

簡介

在頭文件 中定義

namespace std 
{
    template  >
class deque;
}

deque(雙向隊列)是一個索引序列的容器,允許對其頭部和尾部進行快速的插入和刪除。此外,在deque兩端插入和刪除並不會使其它元素的指針或引用失效。

這裡寫圖片描述

這裡寫圖片描述

與deque相反,deque中的元素並非連續存儲:典型的實現是使用一個單獨分配的固定大小數組的序列。

deque的存儲空間會自動按需擴大和縮小。擴大deque比擴大std::deque要便宜,因為它不涉及到現有元素復制到新的內存位置。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KCjxwPmRlcXVlyc+zo7z7stnX97XEuLTU09DUo6jQp8LKo6nI58/Co7ogPGJyPgrL5rv6t8POyiAtILOjyv1PKDEpIDxicj4K1Nq94c6yu/K/qs23suXI67vy0saz/dSqy9ggLSDMr8/6srux5E8oMSkgPGJyPgqy5cjru/LSxrP91KrL2CAtIM/f0NRPKG4pPC9wPgoKCgo8aDEgaWQ9"deque操作">deque操作

構造、復制與析構

deque c //默認構造函數;創建一個空deque

deque c(c2) //復制構造函數;創建一個新的deque作為c2的副本(所有元素都被復制)

deque c = c2 //復制構造函數;創建一個新的deque作為c2的副本(所有元素都被復制)

deque c(rv) //移動構造函數;使用右值對象rv創建一個新deque

deque c = rv //移動構造函數;使用右值對象rv創建一個新deque

deque c(n) //使用默認構造函數創建含有n個元素的deque

deque c(n,elem) //創建一個deque,並使用n個elem進行初始化

deque c(beg,end) //創建一個deque,並使用beg到end范圍內的值進行初始化

deque c(initlist) //創建一個deque,並使用初始化列表進行初始化

deque c = initlist //創建一個deque,並使用初始化列表進行初始化

c.~deque() //銷毀所有元素並釋放內存

非變動性操作

c.empty() //判斷容器是否為空,與size()==0相同,但可能更快

c.size() //返回當前元素數量

c.max_size() //返回可容納的元素最大數量

c.shrink_to_fit() //按要求根據元素的數量去縮小容量

c1 == c2 //判斷c1與c2是否相等

c1 != c2 //判斷c1與c2是否不相等,等同於!(c1==c2)

c1 < c2 //判斷c1是否小於c2

c1 > c2 //判斷c1是否大於c2

c1 <= c2 //判斷c1是否小於等於c2

c1 >= c2 //判斷c1是否大於等於c2

賦值

c = c2 //將c2所有元素賦值給c

c = rv //將右值對象rv的所有元素移動賦值給c

c = initlist //使用初始化列表進行賦值

c.assign(initlist) //使用初始化列表進行賦值

c.assign(n,elem) //使用n個elem元素進行賦值

c.assign(beg,end) //使用beg到end范圍內的元素進行賦值

c1.swap(c2) //交換c1和c2的數

swap(c1,c2) //交換c1和c2的數

元素存取

c[idx] //返回索引idx所標示的元素,不進行范圍檢查

c.at(idx) //返回索引idx所標示的元素,如果越界,拋出range-error

c.front() //返回第一個元素,不檢查第一個元素是否存在

c.back() //返回最後一個元素,不檢查最後一個元素是否存在

迭代器相關函數

c.begin() //返回一個隨機存取迭代器,指向第一個元素

c.end() //返回一個隨機存取迭代器,指向最後一個元素

c.cbegin() //返回一個隨機存取常迭代器,指向第一個元素

c.cend() //返回一個隨機存取常迭代器,指向最後一個元素

c.rbegin() //返回一個逆向迭代器,指向逆向迭代的第一個元素

c.rend() //返回一個逆向迭代器,指向逆向迭代的最後一個元素

c.crbegin() //返回一個逆向常迭代器,指向逆向迭代的第一個元素

c.crend() //返回一個逆向常迭代器,指向逆向迭代的最後一個元素

插入和移除元素

c.push_back(elem) //在末尾添加一個elem副本

c.pop_back() //移除末尾元素(但不回傳)

c.push_front(elem) //在頭部添加一個elem副本

c.pop_back() //移除頭部元素(但不回傳)

c.insert(pos,elem) //在迭代器位置前面插入一個elem副本,並返回新元素的位置

c.insert(pos,n,elem) //在迭代器位置前面插入n個elem副本,並返回第一個新元素的位置;若無新插入值,返回原位置

c.insert(pos,beg,end) //在迭代器位置前面插入范圍beg到end的所有元素的副本,並返回第一個新元素的位置;若無新插入值,返回原位置

c.insert(pos,initlist) //在迭代器位置前面插入初始化列表的所有元素的副本,並返回第一個新元素的位置;若無新插入值,返回原位置

c.emplace(pos,args...) //在迭代器位置前面插入一個使用args初始化的元素副本,並返回新元素的位置

c.emplace_back(args...) //在末尾添加一個使用args初始化的元素副本,無返回值

c.emplace_front(args...) //在頭部添加一個使用args初始化的元素副本,無返回值

c.erase(pos) //移除迭代器位置的元素,並返回下個元素的位置

c.erase(beg,end) //移除beg到end范圍內的所有元素,並返回下個元素的位置

c.resize(num) //將元素數量設為num(如果size()增大,多出來的元素使用默認構造函數創建)

c.resize(num,elem) //將元素數量設為num(如果size()增大,多出來的元素都是elem的副本)

c.clear() //移除所以元素,清空容器

栗子

#include 
#include 
#include 
#include 

using namespace std;
int main()
{
    //創建deque
    deque coll;

    //插入元素
    coll.assign (3, string("string"));
    coll.push_back ("last string");
    coll.push_front ("first string");

    //輸出元素
    copy (coll.cbegin(), coll.cend(),
    ostream_iterator(cout,"\n"));
    cout << endl;

    //刪除元素
    coll.pop_front();
    coll.pop_back();

    //除了第一個元素,每個元素都在頭部插入another
    for (unsigned i=1; i(cout,"\n"));

    return 0;
}

輸出

first string
string
string
string
last string

string
another string
another string
resized string
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved