C++教程

浏览6733
更新时间2025-08-05

C++ 双端队列

在上一页中,你了解到队列中的元素是从尾部添加、头部移除的。

而双端队列(double-ended queue, Deque)更加灵活,它允许从两端(头部和尾部)添加或移除元素,还支持通过索引访问元素。

要使用双端队列,需包含 <deque> 头文件:

// 包含 deque 库
#include <deque>

创建双端队列

要创建一个双端队列,使用 deque 关键字,并在尖括号 <> 内指定它应存储的值的类型,然后是双端队列的名称:

deque<type> dequeName

实例

// 创建一个存储字符串的双端队列,名为 cars
deque<string> cars;

若需在声明时初始化元素,可用花括号 {} 包裹逗号分隔的列表:

实例

// 创建并初始化 cars 双端队列
deque<string> cars = {"Volvo", "BMW", "Ford", "Tesla"};

// 遍历输出元素
for (string car : cars) {
  cout << car << "\n";
}
运行实例 »

点击 "运行实例" 按钮查看在线实例

注意:双端队列的类型(如例中的 string)一旦声明后不可更改。

访问双端队列元素

您可以通过在方括号 [] 内引用索引号来访问双端队列元素。

双端队列的索引从 0 开始,这意味着 [0] 是第一个元素,[1] 是第二个元素,依此类推:

实例

// 创建一个名为 cars 的双端队列,用于存储字符串
deque<string> cars = {"Volvo", "BMW", "Ford", "Tesla"};

// 获取第一个元素
cout << cars[0];  // 输出 Volvo

// 获取第二个元素
cout << cars[1];  // 输出 BMW
运行实例 »

点击 "运行实例" 按钮查看在线实例

您还可以使用 .front() 和 .back() 函数访问双端队列的第一个或最后一个元素:

实例

// 创建一个名为 cars 的双端队列,用于存储字符串
deque<string> cars = {"Volvo", "BMW", "Ford", "Tesla"};

// 获取第一个元素
cout << cars.front();

// 获取最后一个元素
cout << cars.back();
运行实例 »

点击 "运行实例" 按钮查看在线实例

要访问指定索引处的元素,可以使用 .at() 函数并指定索引号:

实例

// 创建一个名为 cars 的双端队列,用于存储字符串
deque<string> cars = {"Volvo", "BMW", "Ford", "Tesla"};

// 获取第二个元素
cout << cars.at(1);

// 获取第三个元素
cout << cars.at(2);
运行实例 »

点击 "运行实例" 按钮查看在线实例

注意:.at() 函数通常比方括号 [] 更受青睐,因为如果元素超出范围,它会抛出错误消息:

实例

// 创建一个名为 cars 的双端队列,用于存储字符串
deque<string> cars = {"Volvo", "BMW", "Ford", "Tesla"};

// 尝试访问不存在的元素(将抛出异常)
cout << cars.at(6);
运行实例 »

点击 "运行实例" 按钮查看在线实例

更改双端队列元素

要更改特定元素的值,可以引用索引号:

实例

deque<string> cars = {"Volvo", "BMW", "Ford", "Tesla"};

// 更改第一个元素的值
cars[0] = "Opel";

cout << cars[0];  // 现在输出 Opel 而不是 Volvo
运行实例 »

点击 "运行实例" 按钮查看在线实例

然而,使用 .at() 函数更安全:

实例

deque<string> cars = {"Volvo", "BMW", "Ford", "Tesla"};

// 更改第一个元素的值
cars.at(0) = "Opel";

cout << cars.at(0);  // 现在输出 Opel 而不是 Volvo
运行实例 »

点击 "运行实例" 按钮查看在线实例

添加双端队列元素

要向双端队列添加元素,可以使用 .push_front() 在双端队列的开头插入元素,使用 .push_back() 在末尾添加元素:

实例

deque<string> cars = {"Volvo", "BMW", "Ford", "Tesla"};

// 在开头添加一个元素
cars.push_front("Audi");

// 在末尾添加一个元素
cars.push_back("VW");
运行实例 »

点击 "运行实例" 按钮查看在线实例

移除双端队列元素

要从双端队列中移除元素,使用 .pop_front() 从双端队列的开头移除元素,使用 .pop_back() 从末尾移除元素:

实例

deque<string> cars = {"Volvo", "BMW", "Ford", "Tesla"};

// 移除第一个元素
cars.pop_front();

// 移除最后一个元素
cars.pop_back();
运行实例 »

点击 "运行实例" 按钮查看在线实例

双端队列大小

要找出双端队列有多少个元素,使用 .size() 函数:

实例

deque<string> cars = {"Volvo", "BMW", "Ford", "Tesla"};
cout << cars.size();  // 输出 4
运行实例 »

点击 "运行实例" 按钮查看在线实例

检查双端队列是否为空

使用 .empty() 函数来检查双端队列是否为空。

如果双端队列为空,.empty() 函数返回 1(true),否则返回 0(false):

实例

deque<string> cars;
cout << cars.empty();  // 输出 1(双端队列为空)
运行实例 »

点击 "运行实例" 按钮查看在线实例

实例

deque<string> cars = {"Volvo", "BMW", "Ford", "Tesla"};
cout << cars.empty();  // 输出 0(不为空)
运行实例 »

点击 "运行实例" 按钮查看在线实例

遍历双端队列

您可以使用 for 循环结合 .size() 函数来遍历双端队列元素:

实例

deque<string> cars = {"Volvo", "BMW", "Ford", "Tesla"};

for (int i = 0; i < cars.size(); i++) {
  cout << cars[i] << "\n";
}
运行实例 »

点击 "运行实例" 按钮查看在线实例

您还可以使用 for-each 循环(在 C++11 版本(2011 年)中引入),它更简洁且更易读:

实例

deque<string> cars = {"Volvo", "BMW", "Ford", "Tesla"};

for (string car : cars) {
  cout << car << "\n";
}
运行实例 »

点击 "运行实例" 按钮查看在线实例

提示:也可以使用迭代器遍历双端队列,您将在后面的章节中了解更多。

相关视频

更多

免费

php8,我来也
初级php8,我来也

34.2万次学习

收藏

免费

Thinkphp6.0正式版视频教程
中级Thinkphp6.0正式版视频教程

39.8万次学习

收藏

免费

细说PHP第一季
中级细说PHP第一季

31.3万次学习

收藏

精品课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

65.3万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

41.5万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

77.1万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

64.3万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

24.5万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

36.5万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

134.2万人学习

热门下载

更多
phpStudy 2018最新版
phpStudy 2018最新版

集成PHP7,16种组合,超全大合集

下载

VC9 32位
VC9 32位

VC9 32位 phpstudy集成安装环境运行库

下载

VC11 32位
VC11 32位

VC11 32位 phpstudy集成安装环境运行库​

下载

php程序员工具箱完整版
php程序员工具箱完整版

程序员工具箱 v1.0 php集成环境

下载

VC14 32位
VC14 32位

VC14 32位 phpstudy安装环境运行库

下载

SublimeText3汉化版
SublimeText3汉化版

中文版,非常好用

下载

Notepad++ Windows版
Notepad++ Windows版

Notepad++ 8.9.7 Windows版官方安装包,适合 Windows 用户进行代码编辑、文本处理、语法高亮和插件扩展配置。

下载