往期文章,推荐阅读:
C++STL详解之vectorhttps://blog.csdn.net/2301_79821509/article/details/141257591?spm=1001.2014.3001.5502
目录
一、deque介绍
C++deque(双端队列)是C++标准模板库(STL)中的一种数据结构,它允许在两端进行插入和删除操作。deque是“double-ended queue”的缩写,可以理解为“双端队列”。
deque与vector类似,都是用动态数组实现的,但deque的插入和删除操作在两端都有较好的性能。它提供了以下几种操作:
-
在头部插入元素:在deque的头部插入一个新的元素。
-
在尾部插入元素:在deque的尾部插入一个新的元素。
-
在头部删除元素:将deque头部的元素删除。
-
在尾部删除元素:将deque尾部的元素删除。
-
访问元素:可以通过索引访问deque中的元素。
deque的特点是能够高效地在两端进行插入和删除操作,因此常用于需要频繁在头部和尾部操作的场景。
使用deque需要包含头文件<deque>,使用std命名空间。
二、deque使用
1、插入
deque可以在两端进行插入操作,包括在左侧插入和在右侧插入。下面是在deque中插入元素的几种方法:
第一种方法:push_back()
C++ deque
(双端队列)是一种容器,可以在两端进行插入和删除操作。push_back()
函数用于在deque
的末尾插入一个元素。
以下是使用push_back()
函数向deque
中插入元素的示例代码:
#include <iostream>
#include <deque>
using namespace std;
int main() {
deque<int> d;
// 在deque的末尾插入元素
d.push_back(10);//插入10
d.push_back(20);//插入20
d.push_back(30);//插入30
return 0;
}
此时deque内部的元素为:
10 20 30
第二种方法.push_front()
C++的std::deque类提供了push_front()函数,用于在deque的前端插入一个元素。它的函数原型如下:
void push_front(const T& value);
其中,T是deque中存储的元素类型,value是要插入的元素的值。
使用push_front()函数,可以将一个元素插入到deque的开头,其他元素往后移动。示例代码如下:
#include <iostream>
#include <deque>
using namespace std;
int main() {
deque<int> d;
d.push_front(1);//在首位增加1
d.push_front(2);//在首位增加2
d.push_front(3);//在首位增加3
//此时d的内容为[3,2,1]
return 0;
}
在这个例子中,我们首先创建了一个空的deque,然后使用push_front()函数插入了三个元素,依次为3, 2, 1。我们可以看到元素的顺序是从大到小。
2、删除
pop_front()和pop_back()
C++ deque(双向队列)是一种支持在两端进行插入和删除操作的容器。pop_front函数用于删除deque的第一个元素,而pop_back函数用于删除deque的最后一个元素。
deque的pop_front函数的语法如下:
void pop_front();
deque的pop_back函数的语法如下:
void pop_back();
示例代码如下:
#include <iostream>
#include <deque>
using namespace std;
int main() {
deque<int> mydeque;
mydeque.push_back(1);
mydeque.push_back(2);
mydeque.push_back(3);
mydeque.pop_front();//删除1
mydeque.pop_back();//删除3
return 0;
}
以上代码创建了一个包含元素1、2和3的deque。然后使用pop_front函数删除第一个元素,再使用pop_back函数删除最后一个元素。
3、遍历
deque的遍历有两种,一种是下标遍历,一种是迭代器遍历。迭代器遍历又分正向和反向。
下标遍历
C++的deque容器可以通过下标遍历,其操作方式和数组类似。下面是一个示例代码:
#include <iostream>
#include <deque>
using namespace std;
int main() {
deque<int> d={1, 2, 3, 4, 5};
int x=d.size();
for (int i=0;i<x;i++) {
cout<<d[i]<<" ";
}
return 0;
}
在上面的示例中,我们创建了一个包含5个整数的deque容器,然后使用for循环通过下标遍历打印出容器中的每个元素。
需要注意的是,使用下标遍历deque时需要保证下标在容器的有效范围内,否则可能会导致访问越界错误。
迭代器遍历
正向遍历
使用C++的deque容器可以通过迭代器进行正向遍历。以下是正向遍历deque的示例代码:
#include <iostream>
#include <deque>
using namespace std;
int main() {
deque<int> d = {1, 2, 3, 4, 5};
deque<int>::iterator it;
// 使用迭代器进行正向遍历
cout << "正向遍历deque:" <<endl;
for(it=d.begin();it<=d.end();it++){
cout<<*it<<" ";
}
return 0;
}
输出结果为:
正向遍历deque:
1 2 3 4 5
在上述代码中,我们使用deque<int>::iterator定义了一个迭代器it
,并通过d.begin()
和d.end()
分别获取deque的起始迭代器和结束迭代器。然后,我们使用迭代器it
进行循环遍历deque中的元素,并使用*it
获取当前遍历的元素值。
反向遍历
要使用迭代器反向遍历C++ deque,可以使用rbegin()和rend()函数来获取反向迭代器,然后使用递减操作符(--)进行遍历。以下是一个示例代码:
#include <iostream>
#include<deque>
using namespace std;
int main()
{
deque<int> d = {1, 2, 3, 4, 5};
// 使用迭代器反向遍历deque
deque<int>::reverse_iterator it;
for (it = d.rbegin(); it != d.rend(); it++) {
cout << *it << " ";
}
return 0;
}
输出结果为:5 4 3 2 1
在这个示例中,我们创建了一个包含1到5的deque。然后,使用rbegin()函数获取反向迭代器的起始位置,使用rend()函数获取反向迭代器的结束位置。在for循环中,使用递减操作符(++)将迭代器向前移动,并使用*操作符获取迭代器指向的值。