stl-deque
deque(雙端隊列)
? ? 需要包括頭文件<deque>;
? ? 定義:
? ? ? ? ?deque<數據類型> 變量名;
? ? Eg:
? ? ? ? deque<int> que;//定義了一個整型的雙端隊列;
? ?基本操作(紅色標識為常用操作):
? ? ? que.assign(beg,end) 將[beg; end)區間中的數據賦值給que。
? ? ? que.assign(n,elem) 將n個elem的拷貝賦值給que。
? ? ? que. at(idx) 傳回索引idx所指的數據,如果idx越界,拋出out_of_range。
? ??? que.back() 返回容器que的最后一個元素的引用。如果que為空,則該操作未定義。
? ??? que.begin() 傳回迭代器中的第一個數據地址。
? ??? que.clear() 移除容器中所有數據。
? ???que.empty() 判斷容器是否為空。
? ? ?que.end() 返回一個迭代器,它指向容器que的最后一個元素的下一位置。
? ? ?que.erase(pos) 刪除pos位置的數據,傳回下一個數據的位置。
? ? ? que.erase(beg,end) 刪除[beg,end)區間的數據,傳回下一個數據的位置。
??? ?que.front() 返回容器que的第一個元素的引用。如果que為空,則該操作為空。
? ? ?que.insert(pos,elem) 在pos位置插入一個elem拷貝,傳回新數據位置
? ??? que.insert(pos,n,elem) 在pos(迭代器)位置插入>n個elem數據。無返回值
?
? ? ?que.insert(pos,beg,end) 在pos位置插入在[beg,end)區間的數據。無返回值
??? ? que.max_size() 返回容器que可容納的最多元素個數。
??? ?que.pop_back() 刪除最后一個數據。
? ? ?que.pop_front() 刪除頭部數據。
? ??? que.push_back(elem) 在尾部加入一個數據。
? ? ? que.push_front(elem) 在頭部插入一個數據。
? ? ? que.rbegin()?返回一個逆序迭代器,它指向容器que的最后一個元素。
? ? ?que.rend() 返回一個逆序迭代器,它指向容器que的第一個元素的前一個位置。
? ? ? que.resize(num) 重新指定隊列的長度。
? ? ? que.size() 返回容器中實際數據的個數。
? ? ?que.swap(que2) 交換容器que和que2中的所有元素。
? ? ?swap(que1,que2) 交換容器que1和que2中的所有元素。
? ? ?代碼解釋:
?
#include <deque> #include <iostream> using namespace std; int main() {deque<int> dInt;dInt.push_back(1);dInt.push_back(3);dInt.push_back(5);dInt.push_back(7);for (int i=0; i<dInt.size(); i++){// 打印 d[0], d[1], d[2], d[3]。訪問越界時,不產生異常cout << "d[" << i << "]=" << dInt[i] << endl;// 輸出 dInt 中各個元素。當訪問越界時,會拋出異常// cout << dInt.at(i) << endl;}return 0; }-------------------------------------------------------- 用迭代器訪問 deque 元素 #pragma warning(disable:4786) // 必須放在首行,忽略長字符的截斷警告 #include <deque> #include <iostream> #include <string> using namespace std; int main() {deque<string> dStr;dStr.push_back("北京");dStr.push_back("2008");dStr.push_back("奧運");// 迭代器 i 和 ienddeque<string>::iterator i, iend;iend = dStr.end();int j;// 打印 “北京2008奧運”for (i=dStr.begin(), j=0; i!=iend; ++i, ++j)cout << *i;cout << endl;return 0; }/* 解釋:由于 deque 使用了兩個迭代器分別指向雙端隊列的首尾,因此,deque 具有高效的【頭部】插入元素的函數 push_front() 其他位置的插入,將涉及相關元素的移位拷貝。 */-------------------------------------------------------- 頭部和中間位置插入 deque 元素 #include <deque> #include <iostream> using namespace std; int main() {deque<int> dInt;dInt.push_back(6);dInt.push_back(7);// 頭部插入dInt.push_front(5);for (int i=0; i<dInt.size(); i++)cout << dInt[i] << ' ';cout << endl;// 中間位置插入// 在第2個元素之前插入9, 即 5 9 6 7 dInt.insert(dInt.begin() + 1, 9);for (int j=0; j<dInt.size(); j++)cout << dInt[j] << ' ';cout << endl;return 0; }/* 解釋:deque 容器提供了刪除首元素的 pop_front 函數,刪除尾元素的 pop_back 函數,刪除任意位置或迭代器區間上元素的 erase 函數,以及刪除所有元素的 clear 函數。 1. void pop_front(); 刪除 deque 的第一個元素 2. void pop_back(); 刪除 deque 的最后一個元素 3. iterator erase(iterator pos); 刪除 pos 所指向的元素 4. iterator erase(iterator first, iterator last); 刪除 迭代器區間 [first, last) 所指向的所有元素。 5. void clear(); 刪除所有元素 */-------------------------------------------------------- 頭尾和其他位置刪除 deque 元素 #include <deque> #include <iostream> using namespace std; int main() {deque<int> dInt;dInt.push_back(4);dInt.push_back(5);dInt.push_back(3);dInt.push_back(3);dInt.push_back(3);dInt.push_back(6);for (int i=0; i<dInt.size(); i++)cout << dInt[i] << ' ';cout << endl;// 頭尾和任意刪除元素dInt.erase(dInt.begin() + 1); // 刪除第 2 個元素 dInt[1]dInt.pop_front(); // 刪除首元素dInt.pop_back(); // 刪除末尾元素for (int j=0; j<dInt.size(); j++)cout << dInt[j] << ' ';cout << endl;// 刪除所有元素dInt.clear();cout << "執行 clear() " << endl << "deque 元素全部清除" << endl;return 0; }-------------------------------------------------------- deque 元素的反向遍歷 #include <deque> #include <iostream> using namespace std; int main() {deque<int> dInt;dInt.push_back(1);dInt.push_back(3);dInt.push_back(5);dInt.push_back(7);dInt.push_back(9);dInt.push_back(11);// deque元素的前向遍歷deque<int>::iterator i,iend;iend = dInt.end();for (i=dInt.begin(); i!=iend; ++i)cout << *i << ' ';cout << endl;// deque元素的反向遍歷deque<int>::reverse_iterator ri, riend;riend = dInt.rend();for (ri=dInt.rbegin(); ri!=riend; ++ri)cout << *ri << ' ';cout << endl;return 0; }-------------------------------------------------------- 兩個 deque 容器的元素交換 #include <deque> #include <iostream> using namespace std;void print(deque<int>& d);int main() {// d1deque<int> d1;d1.push_back(11);d1.push_back(12);d1.push_back(13);cout << "d1 = ";print(d1);// d2deque<int> d2;d2.push_back(90);d2.push_back(91);d2.push_back(92);cout << "d2 = ";print(d2);// d1 和 d2 交換d1.swap(d2);cout << "d1 和 d2 交換后" << endl;cout << "d1 = ";print(d1);cout << "d2 = ";print(d2);return 0; }// deque 元素打印 void print(deque<int>& d) {for (int i=0; i<d.size(); i++)cout << d[i] << ' ';cout << endl; }/* 解釋:deque 其他函數的說明,參加 Random access container 、 Back insertion sequence 和 Front insertion sequence 概念的函數定義要求,下面給出 deque 的其他幾個常用函數的用法。 bool empty() 判斷 deque 容器是否已有元素,是則返回 true,否則返回 false size_type size() 當前 deque 容器的元素個數 size_type max_size() 系統所支持的 deque 容器的最大元素個數 reference front() deque容器的首元素(引用返回),要求 deque 不為空 reference back() deque容器的末元素(引用返回),要求 deque 不為空 */ -------------------------------------------------------- deque 其他常用函數的使用 #pragma warning(disable:4786) #include <deque> #include <iostream> #include <string> using namespace std; int main() {deque<string> dStr;// 打印 deque 為空cout << "dStr是否為空: " << dStr.empty() << endl;// 裝入deque 元素dStr.push_back("紅樓夢");dStr.push_back("三國演義");dStr.push_back("西游記");dStr.push_back("水滸傳");dStr.push_back("史記");dStr.push_back("莫言");dStr.push_back("金庸");dStr.push_back("何亮到此一游");// 打印 deque 所有元素deque<string>::iterator i, iend;iend = dStr.end();for (i=dStr.begin(); i!=iend; ++i)cout << *i << " ";cout << endl;// 打印首元素cout << "deque 首元素為: " << dStr.front() << endl;// 打印末元素cout << "deque 末元素為: " << dStr.back() << endl;// 打印元素個數cout << "deque 元素個數為: " << dStr.size() << endl;// 打印可支持的最大 deque 元素個數cout << "deque 最大元素個數為: " << dStr.max_size() << endl;return 0; }?
?
總結
- 上一篇: 推荐系统从0到1_1
- 下一篇: 2022中国供应链物流创新科技报告