<!--markdown-->## 一、vector(动态数组)

支持随机访问,尾部增删效率高。

声明与初始化

cpp

#include <vector>

using namespace std;

vector<int> v1; // 空vector

vector<int> v2(5); // 5个元素,默认值为0

vector<int> v3(5, 10); // 5个元素,每个值为10

vector<int> v4(v3); // 拷贝v3

vector<int> v5 = {1,2,3,4,5}; // 列表初始化(C++11及以上)

常用函数

cpp

v.push_back(6); // 尾部添加元素6

v.pop_back(); // 删除尾部元素

v.size(); // 返回元素个数

v.empty(); // 为空返回true,否则false

v.clear(); // 清空所有元素

v[0]; // 访问第0个元素(不检查越界)

v.at(0); // 访问第0个元素(越界抛出异常)

v.front(); // 返回第一个元素

v.back(); // 返回最后一个元素

v.insert(v.begin()+2, 7); // 在第2个位置插入7

v.erase(v.begin()+1); // 删除第1个元素

v.erase(v.begin(), v.begin()+3); // 删除前3个元素

二、stack(栈)

后进先出(LIFO)容器适配器,只能操作栈顶元素。

声明与初始化

cpp

#include <stack>

using namespace std;

stack<int> s1; // 空栈

stack<int> s2(s1); // 拷贝s1

常用函数

cpp

s.push(10); // 栈顶压入元素10

s.pop(); // 弹出栈顶元素(无返回值)

s.top(); // 返回栈顶元素

s.size(); // 返回栈中元素个数

s.empty(); // 为空返回true,否则false

三、queue(队列)

先进先出(FIFO)容器适配器,只能操作队头和队尾。

声明与初始化

cpp

#include <queue>

using namespace std;

queue<int> q1; // 空队列

queue<int> q2(q1); // 拷贝q1

常用函数

cpp

q.push(20); // 队尾添加元素20

q.pop(); // 删除队头元素(无返回值)

q.front(); // 返回队头元素

q.back(); // 返回队尾元素

q.size(); // 返回队列中元素个数

q.empty(); // 为空返回true,否则false

四、deque(双端队列)

支持两端高效增删,也支持随机访问,功能介于vector和list之间。

声明与初始化

cpp

#include <deque>

using namespace std;

deque<int> dq1; // 空deque

deque<int> dq2(5); // 5个元素,默认值为0

deque<int> dq3(5, 10); // 5个元素,每个值为10

deque<int> dq4(dq3); // 拷贝dq3

deque<int> dq5 = {1,2,3,4,5}; // 列表初始化

常用函数

cpp

dq.push_back(6); // 尾部添加元素6

dq.push_front(0); // 头部添加元素0

dq.pop_back(); // 删除尾部元素

dq.pop_front(); // 删除头部元素

dq.size(); // 返回元素个数

dq.empty(); // 为空返回true,否则false

dq.clear(); // 清空所有元素

dq[0]; // 访问第0个元素

dq.at(0); // 访问第0个元素(越界检查)

dq.front(); // 返回第一个元素

dq.back(); // 返回最后一个元素

dq.insert(dq.begin()+2, 7); // 在第2个位置插入7

dq.erase(dq.begin()+1); // 删除第1个元素