(Day2)常用stl

  • vector:

用法:

sort(ve.begin(),ve.end());//排序

ve.push_back();//末尾插入

ve.pop_back();//末尾删除

ve.insert(v.begin(),x);//在最头插入x

ve.insert(v.begin()+2,x);//在第二个元素前插入x

ve.erase(ve.begin());//里面是迭代器,删除相应的
  • string
getline(cin,s);//整行读入

s.insert(pos,s1);

s.erase(pos,num);

s.substr(pos,num);

s1.find(s2,pos);
  • pair
pair<>//C艹内置的二元组 用make_pair函数创建
  • queue
priority_queue<int>qu;//优先队列

priority_queue<pair< , >>qu;

priority_queue<int,vector<int>,greater<int> >qu;

qu.back();//取队尾元素
  • 双端队列deque
#include<dequeue>//头文件

deque<int>qu;

qu.front();

qu.back();

qu.push_back();

qu.push_front();

qu.pop_front();

qu.pop_back();
  • set
s.find(x);//找到一样的数字,并返回地址

s.lower_bound(x);//<x的元素

s.upper_bound(x);//>=x的元素

s.erase(it);//删除迭代器指向的元素

s.erase(x);//删除等于x的元素

s.count(x);//返回等于x的个数

s.erase(s.find(2),s.find(4));//删除区间
  • map
mp.find(x);//查找key为x的元素

mp.insert(make_pair(2,3))

map<char,int>::iterator it;//迭代器

不去重

声明时使用multi+set/map声明不去重set/map,使用方法与set/map类似

multiset<int>s;

multiset<int>::iterator it;
  • bitset
#include<bitset>

bitset<10000>s;//10000位的二进制数

s[k]取第k位

s.count();//数有几位

s.any();//只要有一个1就返回true

s.none();//必须全为0才返回true

s.set();//所有位都变为1

s.flip();//所有位置取反

//前几个函数如果里面加上x,就是表示只作用于第几位
  • sort
struct node
{
  int x,y;
};
vector<node>ve;
bool operator<(const node &a,const node &b)
{
  return a.x<b.x;
}
sort(ve.begin(),ve.end());

  • 二分
upper_bound();//>=x

lower_bound();//<x
  • 其他
#incude<algorithm>

reverse(a.begin(),a.end());//翻转

reverse(a+1,a+1+n);

int m=unique(a.begin(),a.end())-a.begin();//返回个

next_permutation(a+1,a+1+n);
  • 查找
lower_bound(first,last,value);

upper_bound(first,last,value);

在有序数组[first,last)中查找第一个

不大于/不小于val的元素地址

题目:洛谷P1168

https://www.luogu.com.cn/problem/P1168

题目大意:

输出前1,前3,前5....数的中位数

思路:

开始想着用优先队列,但是优先队列好像不好把中间的数输出,然后就学到了ve的另一个用法,把数插入到中间去,用二分返回插入的位置,然后直接把需要的数输出就行了。

AC代码:

#include<bits/stdc++.h>
using namespace std;
vector<int>ve;
int main()
{
  int n;
  scanf("%d",&n);
  int x;
  for(int i=1;i<=n;i++)
  {
  		scanf("%d",&x);
    	ve.insert(upper_bound(ve.begin(),ve.end(),x),x);
    	if(i%2==1)cout<<ve[(i-1)/2]<<endl;
  }
  return 0;
}
posted @   wlqtc  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示