📅  最后修改于: 2023-12-03 14:59:45.387000             🧑  作者: Mango
在 C++ STL 中,双端队列(deque)和向量(vector)是两种常用的容器。它们都有着类似于数组的特性,可以高效的执行插入、删除、查找等操作。
双端队列是一种支持在队列两端添加或删除元素的数据结构。在 C++ STL 中,双端队列的实现是基于一个中央控制器(central control block)和多个缓冲块(buffer block)完成的。每个缓冲块中保存着一个定长数组,用于存储元素。
在 C++ STL 中,双端队列的定义方式如下:
#include <deque>
std::deque<int> deque;
双端队列的常用操作包括:在队头插入元素 push_front()
,在队头删除元素 pop_front()
,在队尾插入元素 push_back()
,在队尾删除元素 pop_back()
,访问第一个元素 front()
,访问最后一个元素 back()
,获取队列大小 size()
等。
#include <iostream>
#include <deque>
int main() {
std::deque<int> deque;
// 在队头插入元素
deque.push_front(1);
deque.push_front(2);
deque.push_front(3);
// 在队尾插入元素
deque.push_back(4);
deque.push_back(5);
deque.push_back(6);
// 访问第一个元素和最后一个元素
std::cout << deque.front() << std::endl; // 3
std::cout << deque.back() << std::endl; // 6
// 在队头删除元素
deque.pop_front(); // 3 -> 2 -> 1 -> 4 -> 5 -> 6
// 在队尾删除元素
deque.pop_back(); // 3 -> 2 -> 1 -> 4 -> 5
// 获取队列大小
std::cout << deque.size() << std::endl; // 5
return 0;
}
向量也是一种类似于数组的数据结构,但是它具有更好的动态扩容能力。在 C++ STL 中,向量的实现基于一个动态数组,可以自动调整容量以适应元素数量的变化。
在 C++ STL 中,向量的定义方式如下:
#include <vector>
std::vector<int> vec;
向量的常用操作包括:在末尾添加元素 push_back()
,在指定位置插入元素 insert()
,在末尾删除元素 pop_back()
,访问第一个元素 front()
,访问最后一个元素 back()
,获取向量大小 size()
等。
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec;
// 在末尾添加元素
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
// 在指定位置插入元素
vec.insert(vec.begin() + 1, 4); // 1 -> 4 -> 2 -> 3
// 访问第一个元素和最后一个元素
std::cout << vec.front() << std::endl; // 1
std::cout << vec.back() << std::endl; // 3
// 在末尾删除元素
vec.pop_back(); // 1 -> 4 -> 2
// 获取向量大小
std::cout << vec.size() << std::endl; // 3
return 0;
}
虽然向量和双端队列都可以高效地执行插入、删除、查找等操作,但是它们的内部实现是不同的,选择合适的数据结构要根据具体的业务需求和运行环境进行选择。