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)//删除该迭代器处的元素
    
posted @ 2021-10-21 22:20  多巴胺不耐受仿生人  阅读(43)  评论(0)    收藏  举报