📅  最后修改于: 2023-12-03 15:13:56.952000             🧑  作者: Mango
双端队列(deque)是一种支持从队列两端进行插入和删除操作的数据结构。STL提供了deque容器,可以方便地实现双端队列的功能。
deque容器在内部实现时,使用了一段连续空间的集合,每个空间中存储着一个元素,而这些空间通过指针进行连接,形成了一个双向链表。这种实现方式可以实现高效的头尾插入和删除操作,也能够像vector一样通过下标进行随机访问。
双端队列的核心操作就是头部和尾部的插入和删除。deque容器提供了两个成员函数back()和push_back(),可用于在队列的尾部插入元素,以及访问队列的尾部元素。同样,front()和push_front()函数则可用于在队列的头部进行插入和删除操作。
#include <deque>
#include <iostream>
int main() {
std::deque<int> dq;
dq.push_back(5); // 在队尾插入元素5
dq.push_front(2); // 在队头插入元素2
std::cout << "队列头部元素为:" << dq.front() << std::endl; // 输出队头元素
std::cout << "队列尾部元素为:" << dq.back() << std::endl; // 输出队尾元素
return 0;
}
deque容器也提供了头尾删除操作的函数。pop_back()函数可以删除队列的尾部元素,pop_front()则可用于删除队列的头部元素。
#include <deque>
#include <iostream>
int main() {
std::deque<int> dq = {1,2,3,4,5};
dq.pop_front(); // 删除队头元素1
dq.pop_back(); // 删除队尾元素5
std::cout << "队列头部元素为:" << dq.front() << std::endl; // 输出队头元素
std::cout << "队列尾部元素为:" << dq.back() << std::endl; // 输出队尾元素
return 0;
}
除了front()和back()函数外,deque容器还提供了另外一种方式访问元素:通过迭代器进行访问。deque容器提供了begin()和end()函数用于获取迭代器,通过这种方式访问元素可以随机访问,效率比较高。
#include <deque>
#include <iostream>
int main() {
std::deque<int> dq = {1,2,3,4,5};
std::deque<int>::iterator iter;
for(iter = dq.begin(); iter != dq.end(); ++iter) {
std::cout << *iter << " "; // 通过迭代器随机访问元素
}
std::cout << std::endl;
return 0;
}
除了push_back()和push_front()函数外,deque容器还提供了另外一种插入元素的方法:insert()函数。这个函数可以在任意位置进行插入操作,并且可以插入多个元素。其中第一个参数指定插入位置的迭代器,第二个参数指定要插入的元素的数量,第三个参数则指定要插入的元素的值。
#include <deque>
#include <iostream>
int main() {
std::deque<int> dq = {1,2,3,4,5};
std::deque<int>::iterator iter = dq.begin() + 2; // 指向第3个元素的迭代器
dq.insert(iter, 2, 6); // 在第3个元素前插入两个6
std::deque<int>::iterator it;
for(it = dq.begin(); it != dq.end(); ++it) {
std::cout << *it << " "; // 输出所有元素
}
std::cout << std::endl;
return 0;
}
和插入元素类似,deque容器也提供了erase()函数用于删除指定位置的元素。同样,这个函数也可以一次删除多个元素,只需指定起始和结束的迭代器即可。
#include <deque>
#include <iostream>
int main() {
std::deque<int> dq = {1,2,3,4,5};
std::deque<int>::iterator iter = dq.begin() + 2; // 指向第3个元素的迭代器
dq.erase(iter); // 删除第3个元素
std::deque<int>::iterator it;
for(it = dq.begin(); it != dq.end(); ++it) {
std::cout << *it << " "; // 输出所有元素
}
std::cout << std::endl;
return 0;
}
双端队列是一种支持从队列两端进行插入和删除操作的数据结构。STL中提供了deque容器,通过该容器可以方便地实现双端队列的功能。双端队列的核心操作包括头尾插入和删除、访问元素、插入元素和删除元素等。熟练掌握deque容器的使用可以大大提高程序的开发效率。