21xrx.com
2024-12-22 19:23:18 Sunday
登录
文章检索 我的文章 写文章
C++中的双端队列deque的使用
2023-07-13 18:13:12 深夜i     --     --
C++ 双端队列 deque 数据结构 STL

C++中的双端队列deque是一种支持在队头和队尾进行插入和删除操作的容器。deque是“double-ended queue”的缩写,也被称为双端队列。deque底层实现为一个动态数组,具有随机访问的能力,因此在访问元素时效率很高。

deque的定义方式如下:


std::deque<T> deque_name;

其中T为deque中存储元素的类型,deque_name为deque的变量名。deque的定义可以设置初始元素个数和初始元素值,例如:


std::deque<int> mydeque(5, 100); // 包含5个整数,每个值都是100

deque支持的成员函数和操作有很多,以下是其中常用的一些:

1. push_front(): 在队头插入元素

2. push_back():在队尾插入元素

3. pop_front():删除队头元素

4. pop_back():删除队尾元素

5. front():返回队头元素

6. back():返回队尾元素

7. size():返回deque中元素的个数

8. empty():判断deque是否为空

9. clear():清空deque中的所有元素

下面是一个使用deque的例子,演示了如何使用双端队列添加、删除、访问元素等基本操作:


#include<deque>

#include<iostream>

int main()

{

  std::deque<int> mydeque; //定义一个空的双端队列

  //在队尾插入三个元素

  mydeque.push_back(1);

  mydeque.push_back(2);

  mydeque.push_back(3);

  //在队头插入两个元素

  mydeque.push_front(4);

  mydeque.push_front(5);

  //打印队列大小和元素值

  std::cout << "deque size: " << mydeque.size() << std::endl;

  for (auto it = mydeque.begin(); it != mydeque.end(); ++it)

  {

    std::cout << *it << " ";

  }

  std::cout << std::endl;

  //删除队头和队尾元素

  mydeque.pop_front();

  mydeque.pop_back();

  //打印队列大小和元素值

  std::cout << "deque size: " << mydeque.size() << std::endl;

  for (auto it = mydeque.begin(); it != mydeque.end(); ++it)

  {

    std::cout << *it << " ";

  }

  std::cout << std::endl;

  //访问队头和队尾元素

  std::cout << "deque front: " << mydeque.front() << std::endl;

  std::cout << "deque back: " << mydeque.back() << std::endl;

  //清空队列

  mydeque.clear();

  return 0;

}

输出结果为:


deque size: 5

5 4 1 2 3

deque size: 3

1 2 3

deque front: 1

deque back: 3

在实际开发中,deque常用于需要在队头和队尾频繁插入和删除元素的场景,如最近最少使用算法(LRU)中维护未使用过的元素集合。deque的应用场景比vector更广泛,是C++中一个非常实用的容器。

  
  

评论区

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