C++标准模板库(STL)用法总结
编辑:谯胜平 分类:程序与算法 标签:STL 发布时间:2019-06-13 浏览次数:1287次
在C语言中,很多东西都需要读者自己去实现,并且实现不好的话很容易出错,有些复杂的操作写起来相当麻烦。因此,C++中为使用者提供了标准模板库(Standard Template Library, STL),其中封装了很多实用的容器,不需要费力去实现它们的细节而直接调用函数来实现很多功能。因为很多容器的用法容易混淆,现总结如下(来源于《算法笔记》. 胡凡, 曾磊主编. 机械工业出版社. P:191-244):
C++标准模板库(STL)介绍 | ||||||
容器名称 | 容器描述 | 头文件 | 基本用法 | 注意事项 | 用途 | |
vector | 变长数组 | #include<vector> | vector<type> arr[size]; | 定义vector数组 | ||
vi.begin() | 取首元素地址 | vi.begin()+n | ||||
vi.end() | 尾后一个地址 | |||||
vi.push_back(x) | 添加一个元素x | |||||
vi.pop_back() | 删除vi的尾元素 | |||||
vi.size() | 元素个数 | unsigned类型 | ||||
vi.clear() | 清空 | |||||
vi.insert(it, x) | 在it处插入元素x | |||||
vi.erase(it); vi.erase(first, last) | 擦除元素 | |||||
set | 集合(自动有序不重复) | #include<set> | set<type> st; | 定义一个set | 可使用迭代器 | |
set<type> arr[size] | 定义set数组 | |||||
st.begin() | 首元素地址 | |||||
st.end() | 尾后一个地址 | 无:it < st.end() | ||||
st.insert(x) | 插入x | |||||
st.find(val) | 查找val的迭代器 | |||||
st.erase(it);st.erase(value);st.erase(first, last) | 擦除元素 | |||||
st.size() | 元素个数 | |||||
st.clear() | 清空set | |||||
string | 字符串 | #include<string> | string str="abc"; | 定义一个string | ||
printf("%c",str[1]) | 通过下标访问 | |||||
cin>>str | 输入输出字符串 | |||||
str.c_str() | 转化为字符数组 | |||||
string::iterator it; | 通过迭代器访问 | it + 整数 | ||||
str1 + str2 | 拼接字符串 | |||||
str1>str2 | 比较大小 | |||||
str.length() | 长度 | |||||
str.size() | 长度 | |||||
str.insert(pos, str) | 在pos处插入str | str.insert(it,it1,it2) | ||||
str.erase(it); str.erase(first, lase); str.erase(pos, length) | 擦除元素 | |||||
str.clear() | 清空 | |||||
str.substr(pos,len) | 返回pos处长为len的子串 | |||||
string::npos | find失配的返回值 | |||||
str.find(str2,pos) | 从str的pos号位开始匹配str2 | |||||
str.replace(pos,len,str2) | 把str从pos号位开始,长度为len的字串替换为str2 | |||||
map | 映射(任何类型映射到任何类型,按键值自动排序) | #include<map> | map<ty1,ty2> mp | 定义一个map | 字符串到整型必须是string不能是char | ①需要建立字符与整数之间映射的题目; ②判断大整数或者其他数据类型是否存在的题目; ③字符串与字符串的映射。 |
mp['c'] | 通过键值访问 | |||||
map<ty1,ty2> ::iterator it; | 迭代器访问 | it->first访问键, it->second访问值 | ||||
mp.find(key) | 返回键值为key的迭代器 | |||||
mp.erase(it); mp.erase(key); mp.erase(first,last); | 擦除元素 | |||||
mp.size() | 获取映射对数 | |||||
mp.clear() | 清空 | |||||
queue | 队列(先进先出) | #include<queue> | queue<type> q; | 创建一个队列 | ||
q.front() | 访问队首 | 需empty()判空 | ||||
q.back() | 访问队尾 | |||||
q.push(x) | 入队 | |||||
q.pop() | 队首出队 | 需empty()判空 | ||||
q.empty() | 判断是否为空 | |||||
q.size() | 元素个数 | |||||
priority_queue | 优先队列 | #include<queue> | q.top() | 访问队首元素 | 无front()和back() | |
q.push() | 入队 | |||||
q.pop() | 出队 | |||||
q.empty() | 判空 | |||||
q.size() | 元素个数 | |||||
stack | 栈(后进先出) | #include<stack> | stack<type> st; | 定义栈 | ||
st.top() | 访问栈顶 | |||||
st.push() | 入栈 | |||||
st.pop() | 出栈 | |||||
st.empty() | 判空 | |||||
st.size() | 元素个数 | |||||
pair | 对(将两个元素合成一个) | #include<utility>或#include<map> | pair<ty1, ty2> p; | 定义一个pair | ①代替二元结构体及构造函数; ②作为map的键值对插入。 | |
p.make_pair("hel", 5); | 初始化 | |||||
p.first | 访问第一个元素 | |||||
p.second | 访问第二个元素 | |||||
p1 < p2 | 比较大小 | first相等时判断second | ||||
algorithm | 基本算法 | #include<algorithm> | max(a, b) | a,b的最大值 | 参数可为浮点数 | |
min(a, b) | a,b的最小值 | 参数可为浮点数 | ||||
abs(x) | x的绝对值 | 必须整数 | ||||
swap(a, b) | 交换a,b | |||||
reverse(it1, it2) | 反转[it1, it2)区间元素 | |||||
next_permutation(a, a+n) | n阶全排列 | |||||
fill(a, a + n, value) | 给数组a复制,n为个数 | |||||
sort(a, a + n, cmp) | 排序 | 默认递增 | ||||
nth_element(first, pos,last) | 将第pos大元素放在pos处,左边小于pos,右边大于pos | data[n]数组:eth_element(data, data+5,data+n); vector容器: eth_element(v.begin(), v.begin()+5,v.end()) | ||||
lower_bound(first,last,val) | [first,last)内第一个大于等于val的元素位置 | |||||
upper_bound(first,last,val) | [first,last)内第一个大于val的元素位置 |
热门文章
猜你喜欢
文章标签
- 考研经验(10)
- 计算机考研(8)
- 408(1)
- 数学一(1)
- codeup(4)
- 字符串处理(5)
- web(3)
- 学科评估(2)
- scanf(2)
- gets(1)
- getchar(1)
- sublime text(2)
- java(1)
- 五子棋(1)
- printf(1)
- 最大公约数(1)
- 最小公倍数(1)
- mysql(1)
- 作息时间(2)
- STL(1)
- PAT(2)
- 富文本编辑器(1)
- 数据类型(1)
- 完全二叉树(1)
- 闰月(1)
- 晴天的魔法乐园(6)
- 递归(1)
- 棋盘覆盖问题(1)
- PPT模板(1)
- 谷歌(1)
- unzip(1)
- gcc(1)
- ubuntu(1)
- getline()(1)
- 日历(1)
- 作息时间表(1)
友情链接