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

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

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

C++ STL中的双端队列(deque)与向量(vector)是非常有用的容器,它们可以用来存储一组元素,并提供快速的随机访问和插入/删除操作。双端队列与向量之间也有一些区别,本文将介绍它们的用法、功能以及具体的应用。

双端队列(deque)

双端队列是一种双向开口的队列,可以在队列两端进行插入和删除操作。双端队列在实际应用中非常方便,特别是在需要反转和随机访问元素的情况下。

常用方法

以下是双端队列常用的方法:

  • push_front() - 在队列头部插入一个元素
  • push_back() - 在队列尾部插入一个元素
  • pop_front() - 从队列头部删除一个元素
  • pop_back() - 从队列尾部删除一个元素
  • front() - 返回队列头部元素的引用
  • back() - 返回队列尾部元素的引用
  • empty() - 判断队列是否为空
  • size() - 返回队列中元素的个数

示例代码

#include <iostream>
#include <deque>

using namespace std;

int main() {
    deque<int> d;

    d.push_front(1);
    d.push_back(2);
    d.push_front(3);
    d.push_back(4);

    cout << "The deque contains ";
    for (auto it = d.begin(); it != d.end(); ++it) {
        cout << *it << " ";
    }
    cout << endl;

    d.pop_front();
    d.pop_back();

    cout << "The deque contains ";
    for (int i = 0; i < d.size(); ++i) {
        cout << d[i] << " ";
    }
    cout << endl;

    return 0;
}

输出结果

The deque contains 3 1 2 4
The deque contains 1 2
向量(vector)

向量是一种可以动态调整大小的数组,可以在数组末尾快速插入和删除元素。向量在实际应用中非常常用,特别是在需要大量元素的情况下。

常用方法

以下是向量常用的方法:

  • push_back() - 在向量尾部插入一个元素
  • pop_back() - 从向量尾部删除一个元素
  • front() - 返回向量第一个元素的引用
  • back() - 返回向量最后一个元素的引用
  • empty() - 判断向量是否为空
  • size() - 返回向量中元素的个数
  • capacity() - 返回向量中当前可用空间的大小
  • reserve() - 改变向量可用空间的大小
  • clear() - 删除向量中所有元素

示例代码

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> v;

    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);

    cout << "The vector contains ";
    for (auto it = v.begin(); it != v.end(); ++it) {
        cout << *it << " ";
    }
    cout << endl;

    v.pop_back();
    v.pop_back();

    cout << "The vector contains ";
    for (int i = 0; i < v.size(); ++i) {
        cout << v[i] << " ";
    }
    cout << endl;

    return 0;
}

输出结果

The vector contains 1 2 3 4
The vector contains 1 2
双端队列与向量之间的区别

双端队列与向量之间的主要区别在于它们的内部实现方式。双端队列是通过一个动态分配的数组进行实现的,这个数组是由一些固定大小的缓存块组成的。而向量则是通过一个连续的动态分配的内存块进行实现的。

当你需要在向量末尾进行大量的元素插入或删除操作时,双端队列是更好的选择,因为它可以在队列另一端操作,不会影响内存中元素的相对位置。但是,如果你需要进行大量的元素访问操作,向量则是更好的选择,因为它的内存是连续的,可以通过对元素的下标进行随机访问。

总结

本文介绍了C++ STL中的双端队列与向量的用法以及它们之间的区别。无论是哪种容器,都是非常有用的,可以帮助你轻松管理一组元素。当你选择使用一个容器时,请根据需要进行选择,并选择正确的操作方法。