📜  C++ STL 中的双端队列与向量(1)

📅  最后修改于: 2023-12-03 14:59:45.387000             🧑  作者: Mango

C++ STL 中的双端队列与向量

在 C++ STL 中,双端队列(deque)和向量(vector)是两种常用的容器。它们都有着类似于数组的特性,可以高效的执行插入、删除、查找等操作。

双端队列 deque

双端队列是一种支持在队列两端添加或删除元素的数据结构。在 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;
}
向量 vector

向量也是一种类似于数组的数据结构,但是它具有更好的动态扩容能力。在 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;
}

虽然向量和双端队列都可以高效地执行插入、删除、查找等操作,但是它们的内部实现是不同的,选择合适的数据结构要根据具体的业务需求和运行环境进行选择。