STL

STL

扩容

倍增

倍增定义 倍增法(英语:binary lifting),顾名思义就是翻倍。它能够使线性的处理转化为对数级的处理,大大地优化时间复杂度。

倍增的主要应用 :ST表模版题 ,LCA模版题

image-20230705155401072

	cin>>n>>m; lg[1]=0;
	for (int i=2;i<=n;i++) 
        lg[i]=lg[i>>1]+1;
	for (int i=1;i<=n;i++) 
        cin>>f[i][0];
	for (int j=1;j<=lg[n];j++)
		for (int i=1;i<=n-(1<<j)+1;i++)
    {
		f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
	}
	for (int i=1;i<=m;i++)
	{
		cin>>x>>y;
		int l=lg[y-x+1];
		cout<<max(f[x][l],f[y-(1<<l)+1][l])<<endl;
	}

string

初始化

string str;
string str(s); //str是s的副本
string str(s,2,5); //指定s从2到5初始化
string str(s.begin(),s.end());//使用迭代器初始化

迭代器

定义
string::iterator itr;
string::const_iterator citr;
赋值
vec.begin(); 
vec.end();
vec.rend();
vec.rebgin();

image-20230705090357252

容量

字符串长度:size和length

判读字符串是否为空:empty

修改

赋值

s2.assign(s1);
s2.assign(s1,6,3);//将s1从下表为6开始赋值长度为3
s2.assign(s1,2,s1.npos);//s1.npos为一个静态常量,表示字符串结尾处。

vector

操作

push_back:尾部插入元素(扩容原理倍增)。

pop_back:尾部删除元素。

resize:重置容器大小,不会重置原有元素。

swap:本质是换了指针,可以理解为给两容器互换名字。高效 的清空一个容器和一个空容器。

clear:删除全部元素。

应用

存图 : 拓扑排序,dp

启发式合并 : swap,并查集

deque, queue和priority_queue

deque(双端列队)

push_back:尾插

push_front:头插

pop_front:头删

pop_back:尾删

empty:判断元素是否为空

top:取出堆顶

pop:删除堆顶

queue(列队)

push:尾插

pop:头删

empty:判断元素是否为空

back:队尾元素

front:队头元素

priority_queue(优先列队)

push:尾插

top:取出堆顶

pop:删除堆顶

priority_queue<int> q;//默认大堆顶
priority_queue<int,vector<int>,less<int>>//大堆顶
priority_queue<int,vector<int>,greater<int>>//小堆顶
自定义类型
struct node
{
    int x,y;
}
方法一:重载operator<
bool operator<(node a,node b)
{
    if(a.x==b.x) return a.y>b.y;
    return a.x>b.x;
}
priority_queue<node> q;

方法二:自定义cmp
struct cmp1{
    bool operator()(node a,node b)
    {
        if(a.x==b.x)return a.y>b,y;
        return a.x>b.x;
    }
}
struct cmp2{
    bool operator()(node a,node b)
    {
        if(a.x==b.x)return a.y<b,y;
        return a.x<b.x;
    }
}
priority_queue<node,vector<node>,cmp1> q;

set 和multiset

set(不允许重复元素)

erase:删除点

instrea:插入点

lower_bound(x):求第一个大于等于x的值的迭代器

upper_bound(x):求第一个大于x的迭代器(如果没有返回最后一个元素的迭代器)

find(x):返回x的迭代器,如果没有 返回end();

求集合最小值:*.begin() 最大值:*.rbegin()

multiset(允许重复元素)

.find(x):返回x的一个迭代器,若有多个返回第一个。

erase(iterator):删除这个迭代器指向的元素

erase(value):将值为value的这些元素均删除

pair map和multimap

pair

pair<int,int> p;

p.first

p.second

map

map是STL的一个关联容器,它提供一对一的hash。

第一个可以称为关键字(key),每个关键字只能在map中出现一次;
第二个可能称为该关键字的值(value);

map<int,int> mp;
mp[key]=value;

put(key,value)

insert:插入元素

clear:移除map里所有的映射关系

get(key):查询key对应的value值

isEmpyt:判断map集合是否为空

remove(key):利用key删除map集合中的元素

keySet():获取所有的key值

values:获取所有的value值

.find(key):所查找的key出现时,返回对象所在位置

multimap

multimap容器中可以同时存储多个键相同的键值对。

底层实际为pair

通过迭代器进行访问

multimap<key,value> mmp;
mmp.insert(make_pair(first,second));

count(key):当前key键值对的个数

posted @ 2025-07-07 15:39  星空丶star  阅读(10)  评论(0)    收藏  举报