📜  C++ STL-Deque队列(1)

📅  最后修改于: 2023-12-03 15:29:50.208000             🧑  作者: Mango

C++ STL-Deque队列

在C++中,STL提供了一种双端队列容器deque,即double-ended queue。deque可以在两端进行插入、删除操作,可以实现先进先出(FIFO)和后进先出(LIFO)等多种队列行为。

deque可以看作一个数组的容器,使用随机访问方式,同时也支持在两端进行插入和删除操作。deque的大小可以动态调整。

声明和初始化

使用deque需要包含头文件<deque>。可以通过以下方式进行声明:

deque<数据类型> 队列名;

例如:

deque<int> myDeque;

可以在声明时指定deque的初始大小和初始值:

deque<int> myDeque(5, 100);   // 创建一个5个元素,初始值为100的deque

也可以通过将一个已有数组作为deque的初始值来进行初始化:

int myArr[] = {1, 2, 3, 4, 5};
deque<int> myDeque(myArr, myArr+5);  // 声明一个包含5个整型元素的deque
插入和删除元素

deque支持在队列头和队列尾进行插入和删除元素的操作,具体方法如下:

  1. 在队列头插入元素:使用push_front()方法将元素插入队列头。
  2. 在队列尾插入元素:使用push_back()方法将元素插入队列尾。
  3. 在队列头删除元素:使用pop_front()方法将队列头的元素删除。
  4. 在队列尾删除元素:使用pop_back()方法将队列尾的元素删除。

例如:

myDeque.push_back(6);       // 将元素6插入队列尾
myDeque.push_front(0);      // 将元素0插入队列头
myDeque.pop_back();         // 删除队列尾的元素
myDeque.pop_front();        // 删除队列头的元素
访问元素

deque的元素可以通过下标或迭代器(iterator)访问,下标从0开始,迭代器通过begin()end()方法获取。

例如:

for(deque<int>::iterator it=myDeque.begin(); it!=myDeque.end(); ++it) {
    cout << *it << " ";       // 输出deque的所有元素
}
cout << endl;

cout << myDeque[2] << endl;     // 输出第3个元素(下标从0开始)
deque的特性
  • deque是一个双端队列(double-ended queue),支持在队列头和队列尾进行插入和删除操作。
  • deque的内部实现类似于一个动态数组,可以根据需要进行动态扩展或收缩。
  • deque支持随机访问和迭代器访问。
  • deque的插入和删除操作的时间复杂度为O(1)。
  • deque的访问操作的时间复杂度为O(N)。
总结

deque是一种非常方便的数据结构,可以在两端进行插入和删除操作,非常适合实现队列和栈。在实际应用中,可以根据需要选择不同的STL容器,以满足不同的需求。