
C++ 功能强大,为我们提供了标准模板库( S t a n d a r d Standard Standard T e m p l a t e Template Template L i b r a r y Library Library,简称STL),其中封装了很多实用的容器。容器可以理解成能够实现很多功能的系统函数,或者说是一种用来存放数据的对象,我们可以根据格式直接调用,而不用去关心其内部实现的原理和具体代码,十分方便快捷!常见的容器有 v e c t o r 、 s t a c k 、 q u e u e 、 m a p 、 s e t vector、stack、queue、map、set vector、stack、queue、map、set等。
具体介绍 队列queue 概念队列(queue)是一种具有先进入队列的元素一定先出队列性质的表。
定义#include常用函数using namespace std; queue name;
需要注意,在使用 front() 和 pop() 前,必须用 empty() 来判断队列是否为空。
在优先队列(priority_queue)中,元素被赋予优先级。优先队列具有最高级先出的行为特征。通常采用堆数据结构来实现。
定义priority_queueq; // 数据类型为 typename priority_queue q; // 使用 container作为底层容器 priority_queue q; // 使用 compare 作为比较类型 // 注意:不可跳过 container 直接传入 compare
大根堆优先队列的定义: priorty_queue常用函数q; //默认为大顶堆优先队列 priorty_queue ,less > q; 小根堆优先队列的定义: priorty_queue ,greater > q;
栈(stack)是一种具有后进入栈的元素一定先出栈性质的表。
定义#include常用函数using namespace std; stack name;
push()
push(x) 将 x 压栈,时间复杂度为
O
(
1
)
O(1)
O(1)。
top()
用来获得 栈顶元素 ,时间复杂度为
O
(
1
)
O(1)
O(1)
pop()
pop() 用来弹出栈顶元素,时间复杂度为
O
(
1
)
O(1)
O(1).
注意pop()是删不是取。
empty()
empty() 用来检测
s
t
a
c
k
stack
stack 是否为空,空返回
t
r
u
e
true
true,非空返回
f
a
l
s
e
false
false,时间复杂度为
O
(
1
)
O(1)
O(1)。
size()
size( ) 返回
s
t
a
c
k
stack
stack 内元素的个数,时间复杂度为
O
(
1
)
O(1)
O(1) 。
不定长数组(vector)是一个 内存连续、长度不定 的数组(亦称 列表 或 变长数组 )数据结构,能够存放各种类型的对象。
定义// 以下为常数复杂度 // 1. 创建 vector vector常用函数name; // 2. 移动 v 到新创建的 v1,不发生拷贝,但需要 C++11(与 6 结果相同) vector v1(std::move(v)); // 或 v1 = std::move(v); // 以下为线性复杂度 // 3. 创建一个初始空间为 x 的 vector,其元素的默认值是 0 vector name(x); // 4. 创建一个初始空间为 x 的 vector,其元素的默认值是 y vector name(x, y); // 5. 创建一个初始空间为 x 的 vector, // 其元素的默认值是y, 并且使用 v1 的空间配置器(注:get_allocator:返回相关的分配器) vector v(x, y, v1.get_allocator()); // 6. 创建一个 v 的拷贝 v1, 其内容元素和 v 一样(与 2 结果相同) vector v1(v); // 7. 创建一个 v 的拷贝 v1,其内容是{v[1], v[2]} vector v1(v.begin() + 1, v.begin() + 3);