首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

STL 容器 deque 完整操作指南:雙端隊列高效隨機訪問

     編輯:關於C++

容器特性

deque(<deque>)雙端隊列,特點:

  • 首尾 O(1) 插入/刪除,中間 O(n)
  • 支援隨機訪問 operator[]、at(),O(1)
  • 迭代器為隨機訪問迭代器,支援 +n、-n、[]
  • 內存分段連續(塊狀分配),擴容不需移動現有元素,比 vector 擴容廉價
  • 無容量預留機制(reserve),shrink_to_fit() 釋放多餘內存

構造與賦值

deque c;                    // 空
deque c(c2);                // 複製
deque c = c2;               // 複製
deque c(move(c2));          // 移動
deque c(n);                 // n個默認值
deque c(n, val);            // n個val
deque c(beg, end);          // 範圍
deque c = {1,2,3};          // 初始化列表
c.assign({4,5,6});             // 列表賦值
c.assign(n, val);              // 重複值賦值
c.assign(beg, end);            // 範圍賦值
c1.swap(c2); swap(c1, c2);     // 交換

元素訪問

c[idx]        // 無邊界檢查
c.at(idx)     // 越界拋出 out_of_range
c.front()     // 首元素
c.back()      // 尾元素

迭代器

c.begin(), c.end()
c.cbegin(), c.cend()
c.rbegin(), c.rend()      // 逆向
c.crbegin(), c.crend()    // 逆向常量

插入與刪除

c.push_back(val)           // 尾部插入
c.pop_back()               // 尾部刪除
c.push_front(val)          // 首部插入
c.pop_front()              // 首部刪除
c.insert(pos, val)         // pos前插入,返回新元素迭代器
c.insert(pos, n, val)      // pos前插入n個
c.insert(pos, beg, end)    // pos前插入範圍
c.insert(pos, init_list)   // pos前插入列表
c.emplace(pos, args...)    // pos前原地構造
c.emplace_back(args...)    // 尾部原地構造
c.emplace_front(args...)   // 首部原地構造
c.erase(pos)               // 刪除pos,返回下一個
c.erase(beg, end)          // 刪除範圍
c.resize(n) / c.resize(n, val)
c.clear()                  // 清空
c.shrink_to_fit()          // 釋放多餘容量

非修改操作

c.empty()           // 是否為空
c.size()            // 元素數量
c.max_size()        // 最大容量
c1 == c2, !=, <, >, <=, >=  // 字典序比較

完整示例

deque coll;
coll.assign(3, "string");
coll.push_back("last string");
coll.push_front("first string");
// 輸出: first string / string / string / string / last string

coll.pop_front(); coll.pop_back();
for (size_t i=1; i

輸出結果

first string
string
string
string
last string

string
another string
another string
resized string

選擇建議

  • 需首尾高效操作 + 隨機訪問 → deque
  • 僅尾部操作 + 隨機訪問 → vector
  • 頻繁中間插刪、無隨機訪問 → list/forward_list
  • 固定大小、高性能 → array
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved