STL
STL知识总结
set---集合
插入和搜索的时间复杂度是O(logn),效率较高
会自动排序(升序)
元素互异
只能通过迭代器iterator访问
我们直接上代码
set<int>::iterator it;//迭代器长这样
insert(); //插入一个元素,会自动检查重
begin(); //返回set容器的第一个元素的迭代器
end(); //返回set容器的最后一个元素的后面一元素的地址
clear(); //删除set容器中的所有的元素
empty(); //判断set容器是否为空
size(); //返回当前set容器中的元素个数
find(); //查找某个元素是否存在,不存在返回end(),存在则返回序号
count(); //检查某个元素是否存在,返回个数
erase();
//删除 set 容器中值为 val 的元素
例如erase(8);
//删除 position 迭代器指向的元素
例如erase(it);
//删除 [first,last) 区间内的所有元素
例如erase(first,lase);
小细节:iterator可以使用++/--(已被重载),但是不能用+/-
if (++it != a.end()) TURE
if (it+1 != a.end()) FALSE
priority_queue---优先队列
默认从大到小排列
这玩意是容器的容器,第二参数vector
是默认的 除了取最优先元素是top()以外其他和queue基本一致
priority_queue<int> a; priority_queue<结构体名,vector<结构体名>,cmp>qu;//cmp是结构体 priority_queue < int , vector<int>, greater<int> > q; //从小到大 priority_queue<结构体名>qu;//结构体内部经过运算符'<'重载 //上面的重载方式配合下面的结构体 struct node { long long id; long long dis; bool operator<(const node &a) const { return dis > a.dis;//return 0时为排序顺序 } };**方法一** struct cmp { bool operator ()(points a,points b) { return a.step>b.step;//return 0时的符号就是优先规则 } }; **方法二** struct tmp1 { int x;//bool operator <(const T t2)const friend bool operator<(const T&t1,const T&t2) { return t1.x<t2.x;//同上 } }; **方法三** //将运算符重载嵌入结构体 struct Node{ int f; bool operator <(const Node &r)const { return r>r.f;//return 0时为排序顺序 } }
Stack --栈
特性:先进先出
用法:
stack<type>name;
name.push()//添加元素
name.pop();//删除栈顶端元素
name.top();//访问栈顶元素
name.empty();//判断是否为空
stack.size();//返回栈大小
Vector--向量
用法:
Vector <type> name;
Vecotor<type>name[];//相当于二维数组
n.begin();//返回首元素迭代器
n.end();//返回微元素下一地址
n.front();//首元素的值
n.back();//尾元素的值
n.push_back();//往尾部添加一个元素
n.pop_back();//删除尾部第一个元素
n.empty();
n.size();
n.erase(it)//删除当前迭代器it迭代的元素
n.erase(iterator,n);
reverse(a.begin(),a.end());
String--字符串
1.可以用+ +=来进行连接
2.可以用<> == <= >=等关系运算符来比较字符串string
用法:
string a;
a.length();//a.size();求长度
a.substr(n,m);//从a[n]开始截取m个字符,包括a[a]
a.substr(n);//从下标=n处到最后
a.insert(n,str)//在a[n]前插入str
a.erase(a,b)//a[a]开始删除b个,包括a[a]
s1.swap(s2);//交换
a.find(str);//查找str在a中出现的第一个位置,若没找到返回npos
a.find(str,pos);//查找字符串从pos到end,第一次出现的位置
next_permutation(s.begin(),s.end());//此处end,begin和set同
iterator--迭代器
vector<int> a;
vector<int>::iterator it;
for(it=a.begin();it!=a.end();it++)// 由于迭代器与元素之间不是一一映射的线性关系,所以判断条件用it!=a.end();
map--映射
1.map中的key与value一一对应,可以修改value但不能修改key
2.map会根据key自动排序
map<int,string> m;
m.count(k);//返回m中键值为k的元素个数
m.find(k);//返回键值为k的迭代器,若无则返回end()
m.erase(k);//删除键值为k的元素(键值唯一)
m.erase(p);//删除迭代器p指向的元素
List-- 链表
list<int>l;
list<int>::iterator it;
l.erase(it);//将迭代器为it处的元素迭代器删除
l.erase(first,last);//[first,last)删除first到last的元素迭代器
l.push_back();//插入队尾
l.pop_back();//删除队尾
l.push_front();//插入队头
l.pop_back();//删除队头
l.merge(list,cmp)//l与list以cmp的优先顺序合并
l.resize(size,[val]);//将列表的容量大小改为size,值为[val] 可选
l.unique();//删除重复值
l.swap(list);//交换list与l的值
l.remove();//删除大小为某个值的元素
l.insert();//插入某个元素
容器公用函数
reverse(begin,end);//可反转[begin,end)之间的元素,可用于STL容器或者字符串、数组
erase(pos,n);//删除pos位置开始n个元素包括pos
erase(begin,end)//[begin,end)删除该范围内的元素
erase(iterator)//删除该迭代器处的元素
本文来自博客园,作者:多巴胺不耐受仿生人,转载请注明原文链接:https://www.cnblogs.com/VoidCoderTF/articles/15435511.html

浙公网安备 33010602011771号