1256 字
6 分钟
C++ STL 数据结构模板的运用
2021-08-11

本文根据CCF NOI 竞赛大纲 的顺序编写。

栈(stack)#

是一种先进后出的数据结构。使用 STL 的 stack 数据结构需要以下头文件:

#include <stack>

以下是 stack 常用函数(用例中栈名为 ss):

函数语法用例作用类型
push()栈名.push(元素)s.push(a)在栈顶插入新元素操作
pop()栈名.pop()s.pop()弹出栈顶元素操作
top()栈名.top()a = s.top()访问栈顶元素查询
size()栈名.size()len = s.size()查询栈中元素数量查询
empty()栈名.empty()f = s.empty()查询栈是否为空查询

队列(queue)#

队列是一种先进出的数据结构。使用 STL 的 queue 数据结构需要以下头文件:

#include <queue>

以下是 queue 常用函数(用例中队列名为 qq​):

函数语法用例作用类型
push()队列名.push(元素)q.push(a)在队列末端插入新元素操作
pop()队列名.pop()q.pop()弹出队列头端元素操作
front()队列名.front()a = q.front()访问队头元素查询
back()队列名.back()a = q.back()访问队尾元素查询
size()队列名.size()len = q.size()查询队列中元素数量查询
empty()队列名.empty()f = q.empty()查询队列是否为空查询

链表(list)#

链表是一种数据结构。使用 STL 的 list 数据结构需要以下头文件:

#include <list>

链表的函数有点多啊,不是我说……

以下是 list 常用函数(用例中链表名为 ll​)(参考了这篇博客):

函数语法用例作用类型
push_front()链表名.push_front(元素)l.push_front(a)在链表头端插入新元素操作
push_back()链表名.push_back(元素)l.push_back(a)在链表尾端插入新元素操作
insert()(1)链表名.insert(要插入元素的位置, 元素)l.insert(l.begin(), a)在任意位置插入新元素操作
insert()(2)链表名.insert(要插入元素的位置, 要插入的数量, 元素)l.insert(l.begin(), 3, a)在任意位置插入多个新元素操作
insert()(3)链表名.insert(要插入元素的位置, 要插入数据的起始位置, 要插入数据的结束位置)l.insert(l.begin(), v.begin(), v.end())插入另一个向量两点之间的数据操作
pop_front()链表名.pop_front()l.pop_front()弹出链表头端元素操作
pop_back()链表名.pop_back()l.pop_back()弹出链表尾端元素操作
erase()(1)链表名.erase(要删除元素的位置)l.erase(l.end())删除任意位置的元素操作
erase()(2)链表名.erase(要删除元素的起始位置, 要删除元素的结束位置)l.erase(l.begin(), l.end())删除连续多个任意位置的元素操作
clear()链表名.clear()l.clear()清空所有元素操作
assign()链表名.assign(赋值的数量, 要赋的值)l.assign(4, 5)为链表赋多个初值操作
swap()(1)链表名1.swap(链表名2)l1.swap(l2)交换两个链表的值操作
swap()(2)swap(链表名1, 链表名2)swap(l1, l2)交换两个链表的值操作
merge()链表名1.merge(链表名2)l1.merge(l2)将一个链表合并入另一个链表,并按照链表的升序排列**(注意不是链表中元素的升序)**;并将这个链表清空操作
splice()链表名1.splice(插入的位置,链表名2)l1.splice(l1.begin(), l2)在一个链表的任意位置插入另一个链表;并将这个链表清空操作
unique()链表名.unique()l.unique()删除链表中相邻的重复元素操作
begin()链表名.begin()l.begin()链表开始迭代器指针查询
end()链表名.end()l.end()链表末尾迭代器指针查询
cbegin()链表名.cbegin()l.cbegin()指向常量的开始迭代器指针查询
cend()链表名.cend()l.cend()指向常量的末尾迭代器指针查询
rbegin()链表名.rbegin()l.rbegin()反向迭代器指针,指向最后一个元素查询
rend()链表名.rend()l.rend()反向迭代器指针,指向第一个元素的前一个元素查询
front()链表名.front()a = l.front()访问链表头元素查询
back()链表名.back()a = l.back()访问链表尾元素查询
size()链表名.size()len = l.size()查询链表中元素数量查询
empty()链表名.empty()f = l.empty()查询链表是否为空查询

以下是 list 常用函数(用例中链表名为 ll​):

  • 遍历元素
list<int>::iterator it;
for (it = lst.begin(); it != lst.end(); it++)
cout << *it << endl;
  • 元素翻转
#include <algorithm>
reverse(lst.begin(), lst.end());
  • 元素排序
#include <algorithm>
sort(lst.begin(), lst.end()); // 采用的是从小到大的排序
// 如果想从大到小排序,可以采用先排序后反转的方式,也可以采用下面方法:
// 自定义从大到小的比较器,用来改变排序方式
bool Comp(const int& a, const int& b)
{
return a > b;
}
sort(lst.begin(), lst.end(), Comp);

向量(vector)#

向量是一种数据结构。使用 STL 的 vector 数据结构需要以下头文件:

#include <vector>

以下是 vector 常用函数(用例中向量名为 ll):

未完待更……

完了。退役了,更不完了,有人接上这个坑就接上吧,我这给个源码链接,如果有人接上这坑的话回复个链接,我给挂上,就算填了坑了。

源码链接

C++ STL 数据结构模板的运用
https://xn--24wq0n.top/posts/2021-08-11-c_stl_数据结构模板的运用/
作者
淼畔
发布于
2021-08-11
许可协议
CC BY-NC-SA 4.0