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处插入strstr.insert(it,it1,it2)

str.erase(it);

str.erase(first, lase);

str.erase(pos, length)

擦除元素
str.clear()清空
str.substr(pos,len)返回pos处长为len的子串
string::nposfind失配的返回值
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的元素位置


看不清?换一个