21xrx.com
2024-09-19 09:09:10 Thursday
登录
文章检索 我的文章 写文章
C++ deque 的使用指南
2023-08-14 22:33:03 深夜i     --     --
C++ deque 使用指南 数据结构 双端队列

C++ deque(双向队列)是一种在两端进行插入和删除元素的数据结构。它具有与向量(vector)相似的接口,但在两端插入和删除元素的性能上更加高效。

deque 提供了一些在实际应用中非常有用的操作,比如在队列的两端插入和删除元素,同时还可以随机访问元素。在 C++ 标准库中,deque 定义在头文件 中,只需包含该头文件即可开始使用 deque。

创建和初始化 deque 对象非常简单。可以通过以下方式声明和初始化 deque:


#include <deque>

int main() {

  std::deque<int> myDeque; // 声明一个空的 deque

  std::deque<int> myDeque2(5); // 声明一个长度为 5 的 deque,初始值为 0

  std::deque<int> myDeque31; // 使用初始化列表声明并初始化 deque

  return 0;

}

在上述示例中,我们声明了三个不同的 deque 对象,分别为空的 deque、长度为 5 的 deque 和使用初始化列表初始化的 deque。可以根据自己的需求选择合适的初始化方式。

接下来,我们将介绍 deque 的一些常用操作。

1. 元素的插入和删除操作

deque 提供了 push_front、push_back、pop_front 和 pop_back 等方法用于在双端插入和删除元素。下面是一些示例代码:


std::deque<int> myDeque;

myDeque.push_back(1); // 在队尾插入元素

myDeque.push_front(2); // 在队首插入元素

myDeque.pop_back(); // 删除队尾的元素

myDeque.pop_front(); // 删除队首的元素

2. deque 的大小和访问操作

可以使用 size 方法获取 deque 的大小,使用 empty 方法检查 deque 是否为空。可以使用下标操作符 [] 或者 at 方法访问 deque 中的元素。请注意,使用 at 方法访问元素时会进行边界检查。


std::deque<int> myDeque = 5;

std::cout << "Size: " << myDeque.size() << std::endl; // 打印 deque 的大小

if (myDeque.empty())

  std::cout << "Deque is empty." << std::endl;

else

  std::cout << "Deque is not empty." << std::endl;

std::cout << "First element: " << myDeque.front() << std::endl; // 访问队首元素

std::cout << "Last element: " << myDeque.back() << std::endl; // 访问队尾元素

// 通过下标操作符修改元素的值

myDeque[0] = 10;

// 使用 at 方法访问元素

std::cout << "Element at index 1: " << myDeque.at(1) << std::endl;

3. 在 deque 的任意位置插入和删除元素

deque 还提供了在任意位置插入和删除元素的方法,比如 insert、erase 等。这些方法可以接收一个迭代器作为参数,指定插入或删除元素的位置。


std::deque<int> myDeque = 2;

// 在迭代器指定的位置之前插入元素

myDeque.insert(myDeque.begin() + 2, 10);

// 删除迭代器指定的元素

myDeque.erase(myDeque.begin() + 4);

在上述示例中,我们使用 insert 方法在迭代器指定的位置之前插入元素,并使用 erase 方法删除迭代器指定的元素。

总结来说,C++ deque 是一个非常有用的数据结构,可以在双端进行插入和删除操作,并支持随机访问。通过掌握 deque 的基本操作,我们可以更加高效地处理双端队列的问题。希望本篇文章对您学习和使用 C++ deque 有所帮助。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复