欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

stl-deque

发布时间:2025/3/15 编程问答 66 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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; }

 

 

总结

以上是生活随笔为你收集整理的stl-deque的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。