C++ Deque2025年8月29日 | 阅读11分钟 在 C++ 中,deque(双端队列) 是一种可以在队列的头部和尾部添加和移除元素的队列。它支持 FIFO(先进先出)和 LIFO(后进先出)操作,比队列更具灵活性。在 C++ 中,STL deque 是一个顺序容器,可以高效地在头部和尾部插入和删除元素。 ![]() 与只允许在尾部插入、在头部移除的标准 队列 不同,deque 通过允许在两端进行操作提供了更大的灵活性。它还允许使用索引位置访问元素,这使其适用于需要随机访问和动态调整大小的场景。如果我们想使用 deque 容器,我们必须包含 <deque> 头文件。 语法它具有以下语法: 在这个语法中,
简单的 C++ Deque 示例让我们以一个例子来说明 C++ 中的 deque。 示例编译并运行输出 7 8 5 1 2 9 说明 在这个例子中,我们创建了一个包含六个元素的整数 deque:{7, 8, 5, 1, 2, 9}。使用基于范围的 for 循环,它会遍历 deque 并打印每个元素,元素之间用空格分隔。之后,deque 允许在两端进行快速的插入和删除,这在某些场景下比 数组 或 向量 更具灵活性。 Deque 的基本操作在 C++ 的 deque 中执行了几个操作。其中一些如下: 1) 在 Deque 中创建和插入元素要声明一个 deque,请使用 deque 关键字,后跟用尖括号 (< >) 括起来的数据类型,以及变量名。标准模板库 (STL) 提供了 deque 作为一种容器,它允许在两端进行快速的插入和删除。 在 C++ deque 中,我们可以使用 push_back() 和 push_front() 函数在任一端执行插入和删除操作。如果我们想在特定位置插入元素,可以使用 insert() 方法。 在 Deque 中创建和插入元素的示例让我们以一个例子来说明如何在 C++ 中创建和插入元素到 deque 中。 示例编译并运行输出 Deque elements are: 1 5 7 15 18 27 说明 在这个例子中,我们使用了 push_front() 函数在开头插入值,并使用 push_back() 函数在末尾插入值。之后,emplace_front() 和 emplace_back() 函数的作用与 push_front() 和 push_back() 函数相同,但它们更有效地直接插入临时或构造的值。 2) 访问 Deque 中的元素deque 的元素可以直接使用索引表示法(包含方括号 [])进行访问。Deque 是 0 索引的,这意味着第一个元素位于索引 0,第二个元素位于索引 1,依此类推。它允许从容器内的特定位置快速轻松地检索元素。它还提供了 front() 和 back() 方法,可以轻松访问列表的第一个和最后一个元素。 访问 Deque 中元素的示例现在,让我们看一个 C++ 示例,演示如何访问 deque 中的元素。 示例编译并运行输出 App at index 0 is: Snapchat App at index 1 is: Twitter The first app (front) is: Snapchat The last app (back) is: Instagram App at index 2 (using at()) is: Whatsapp App at index 3 (using at()) is: Instagram 说明 在这个例子中,我们创建了一个名为 socialmedia_apps 的 deque,其中包含社交媒体应用程序名称列表,并演示了如何使用索引表示法、front()、back() 和 at() 方法来获取其内容。之后,它会在控制台中显示每个可访问的元素。 3) 修改 Deque 元素要更改 deque 中特定元素的值,请使用用方括号 [] 括起来的索引和 at() 方法。这些函数提供对元素位置的直接访问和值替换。虽然 [] 运算符允许更快的访问,但 at() 函数更安全,因为它会执行边界检查,如果索引超出范围则会抛出异常。 修改 Deque 元素的示例现在,让我们看一个 C++ 示例,演示如何修改 deque 元素。 示例编译并运行输出 Updated list of the Fruitnames: Pomegranate Custard Apple Watermelon Musk melon 说明 在这个例子中,我们使用索引访问运算符 [] 和 at() 函数初始化了一个包含水果名称的 deque。之后,我们在 deque 的开头插入“Banana”,在末尾插入“Grapes”。 4) 从 Deque 中移除元素在 C++ 中,deque 容器允许从队列的头部和尾部进行高效的移除操作。pop_front() 函数用于移除队列头部的元素,而 pop_back() 函数用于移除队列尾部的元素。这些函数会永久删除相应的元素,而不会返回它们。 从 Deque 中移除元素的示例现在,让我们看一个 C++ 示例,演示如何从 deque 中移除元素。 示例编译并运行输出 The Service Queue elements are: Volvo BMW Ford Mazda The updated Service Queue elements are: BMW Ford 说明 在这个例子中,我们演示了如何使用 deque 来处理汽车品牌服务队列。之后,它会显示队列中的所有元素,然后使用 pop_front() 和 pop_back() 移除第一个和最后一个条目。 5) Deque 大小在 C++ 中,size() 方法返回 deque 容器当前包含的元素数量。它是一个常数时间操作,有助于监视队列大小,这对于实际应用程序中的逻辑控制、迭代和状态报告很有用。 Deque 大小示例现在,让我们看一个 C++ 示例,演示 deque 的大小。 示例编译并运行输出 Number of patients waiting: 4 说明 这是一个诊所病人队列的例子。.size() 函数表示当前有多少病人在等待。 6) 检查 Deque 是否为空在 C++ 中,empty() 方法确定 deque 容器是否包含任何元素。如果 deque 为空,则返回 true (1),如果包含至少一个元素,则返回 false (0)。在实时场景中非常有用,例如当只有在容器包含数据时才应执行操作,如任务处理、用户输入响应和队列管理。 检查 Deque 是否为空的 C++ 示例现在,让我们看一个 C++ 示例,演示如何检查 deque 是否为空。 示例编译并运行输出 No books have been returned yet. 说明 在这个例子中,我们创建了一个名为 returnbox 的空 deque,并使用 empty() 函数检查它是否包含任何元素。它会根据 return box 是否包含书籍打印不同的消息。 7) 遍历 Deque使用循环来检索和处理 deque 中的每个元素。基于索引的循环允许按位置访问,当元素位置很重要时适用。基于范围的 for-each 循环(在 C++11 中添加)更易读,当只关注元素本身时很有用。 遍历 Deque 的示例现在,让我们看一个 C++ 示例,演示如何遍历 deque。 示例编译并运行输出 Medication Schedule - (using an index-based loop): Aspirin Vitamin D Antibiotic Cough Syrup Medication Schedule - (using a for-each loop): Aspirin Vitamin D Antibiotic Cough Syrup 说明 在这个例子中,我们创建了一个包含药品列表的 deque。它首先使用基于索引的 for 循环(按位置访问元素)打印药物计划。之后,它使用更简洁的 for-each 循环(直接遍历元素)输出相同的列表。 C++ Deque 函数下表显示了 Deque 的几个函数,它们在 C++ 中执行操作。
Deque 的其他常用操作C++ 中 Deque 的其他一些常用操作如下: C++ Deque 迭代器在 C++ 中,deque 容器支持随机访问迭代器。这些迭代器可以指向 deque 中的元素,并提供与 vector 中找到的元素相同的遍历、修改和访问功能。 语法 声明 Deque 迭代器的语法 C++ Deque 迭代器示例现在,让我们看一个 C++ 示例,演示 deque 迭代器。 示例编译并运行输出 Temperature log for the day: 36.5°C 37°C 36.8°C 37.2°C 36.9°C 说明 在这个例子中,我们初始化了一个包含每日温度信息的双精度值 deque。定义了一个迭代器 q 并使用它来遍历 deque,通过 for 循环访问每个元素。在遍历过程中,每个温度值都打印有“°C”符号,表示摄氏度。 使用 Deque 迭代器访问元素Deque 迭代器通过指向内存位置来提供对元素的访问。可以使用算术运算(如 begin() + i)移动迭代器到任何位置,并使用 * 解引用来检索值。 使用 Deque 迭代器访问元素的示例现在,让我们看一个 C++ 示例,演示如何使用 deque 迭代器访问元素。 示例编译并运行输出 First ID: 11 Second ID: 12 Last ID: 13 说明 在这个例子中,我们创建了一个包含 ID 的整数 deque,并使用迭代器 q 访问特定元素。通过使用 begin() 和 end() 将迭代器分配到相应的位置,它会生成第一个、第二个和最后一个 ID。 时间复杂度下表显示了在 deque 上执行的几个操作的时间复杂度。
C++ Deque 选择题1) 在 C++ 中使用 deque 需要哪个头文件?
答案: b) <deque> 2) 在 deque 的开头插入元素的time complexity是多少?
答案: a) O(1) 3) 哪个函数用于移除 deque 的最后一个元素?
答案: c) pop_back() 4) deque<int>::iterator 代表什么?
答案: d) 指针 5) 关于 deque,以下哪个说法是正确的?
答案: c) 它支持随机访问迭代器 下一个主题C++ List |
在 C++ 中,map 是 STL(标准模板库)的一部分。Map 是关联容器,它们存储排序的键值对,其中每个键都是唯一的,可以插入或删除,但不能修改。与键相关联的值可以更改。语法是……
阅读 13 分钟
在 C++ 中,std::list 是一个序列容器,它允许元素的非连续存储。它实现为双向链表,其中每个元素包含前一个和后一个列表元素的地址。它允许我们将数据存储在……
阅读 15 分钟
在 C++ 中,priority_queue 是 STL 中的一个派生容器,它只考虑优先级最高的元素。队列遵循 FIFO 原则,而 priority_queue 根据优先级弹出元素,即最高优先级的元素首先弹出。它类似于……
阅读 10 分钟
在 C++ 中,队列代表基本数据结构,它们根据先进先出(FIFO)逻辑运行。C++ 的标准模板库(STL)通过其现成的组件提供了一个队列类,这些组件可提高队列操作的效率。队列是一种线性数据结构,它通过队列处理元素……
11 分钟阅读
C++ STL Set 在 C++ 中,set 代表基本数据结构,它以某种排序顺序排列唯一元素并存储它们。集合称为关联容器,唯一排序的元素称为排序键。我们可以插入或……
阅读9分钟
s 在 C++ 中,vector 是标准模板库(STL)的一部分。它们是动态数组,在添加或删除元素时可以自动调整大小。与具有固定大小的数组不同,vector 提供了广泛的灵活性和底层函数,这些函数……
11 分钟阅读
在 C++ 中,stack 是一种线性数据结构,它遵循后进先出(LIFO)原则执行操作。这意味着最后添加的元素将首先被删除,而最后添加的元素最后被删除。在 C++ 中,STL 提供了一个……
阅读9分钟
在 C++ 中,bitset 是一个包含固定大小位序列(0 和 1)的容器。它使我们能够有效地管理和操作固定大小的位序列。它适用于低级操作、内存高效存储和位逻辑。它实现为……
11 分钟阅读
教程 编译器 程序 面向对象编程 STL 面试题 C++ STL (标准模板库) 在 C++ 中,标准模板库 (STL) 是一组强大的模板类和函数,提供了通用的数据...
阅读 13 分钟
在 C++ 中,multimap 是 C++ STL(标准模板库)的一部分。Multimap 是像 map 一样的关联容器,它们存储排序的键值对,但与只存储唯一键的 map 不同,multimap 可以有重复的键。默认情况下,它使用 (<) 运算符进行比较……
阅读 13 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India