分享笔记(周更)
2026-08-11 09:31:01
发布于:浙江
加速器:
ios::sync_with_stdio(false);
cin.tie(nullptr);
队列:
特点:先进先出
queue<int>q;
q.push()//增加元素(默认从后面加)
q.pop()//删除队首元素
q.front()//获取队首元素
q.back()//获取队尾元素
q.size()//获取队列个数
q.empty()//判断队列是否为空,返回1或0
遍历队列1:
while(!q.empty()){
cout<<q.front()<<" ";
q.pop();
}
遍历队列2:
while(q.size()>0){
cout<<q.front()<<" ";
q.pop();
}
栈:
模型:薯片桶 特点:先进后出
stack<数据类型>数组名
stk.push()//往栈中存储元素
stk.pop()//删除栈顶元素
stk.top()//获取栈顶元素
stk.size()//获取栈的元素个数
stk.empty()//判断栈是否为空,返回1或0
遍历栈1:
while(!stk.empty()){
cout<<stk.pop()<<" ";
stk.pop();
}
遍历栈2:
while(stk.size()>0){
cout<<stk.pop()<<" ";
stk.pop();
}
vector:
动态数组,可以根据协需要自动扩容
vector<动态数组类型>动态数组名
数组名.push_back(要输入的内容)
vector<int> v;
for(int i=1;i<=n;i++){
int x;
cin>>x
v.push_back(x);
}
vector的访问:
下标范围:0~v.size();
获取长度:v.size();
vector<int>v(5);
v.size();//返回元素个数
v.front();//返回第一个元素
v.back();//返回最后一个元素
v.resize();//调整大小为n,如果n大于当前大小,新的元素会被初始化
v.reserve();//预分配内容,确保至少可以容纳n个元素,不影响vecter的大小
vector遍历:
for(int i=0;i<v.size();i++){
cout<<v[i]<<" ";
}
前缀和公式:
d[i]=d[i-1]+a[i];
求l~r之间的累加和 d[r]+d[l-1];
秦九韶算法:
K进制求和答案
#include<bits/stdc++.h>
using namespace std;
//秦九韶算法函数
long long fun(string num,int k){
long long res=0;
for(int i=0;i<num.size();i++){
int val=0;
if(num[i]>='0' && num[i]<='9'){
val=num[i]-48;
}else val=num[i]-55;
res=res*k+val;
}
return res;
}
//秦九韶函数结尾
long long ans;
string num;
int main(){
int n;
int k;
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>num;
ans+=fun(num,k);
}
cout<<ans;
return 0;
}
联和体:
union stu{
string name;
double score;
int age;
}a[100005];
for(int i=1;i<=n;i++){
cin>>a[i].name>>a[i].score>>a[i].age;
}
for(int i=1;i<=n;i++){
cout<<a[i].name<<a[i].score<<a[i].age;
}
联合体和结构体的不同的是,一个联合体的长度等于其内部长度最大的成员的长度,而且它们都共享着同一段内存
map:
map是键值对的 键必须是唯一的
map<键类型,值类型> 变量名
键 值
变量名["map的键"]=map的值(既可以表示插入,也可以表示修改)
map中的键默认按照键从大到小排序
例子1:
map<string,double> grades;
键 值
grades["xiaoming"]=89;
遍历map用迭代器:
map<键的类型,值的类型>::iterator it;
返回第一个元素的位置: it.begin()
返回最后一个元素的下一个位置: it.end()
map遍历:
第一种:
(最普通的方法)
map<int,int>::iterator it;
for(it=mp.begin();it!=mp.end();it++){
cout<<(*it).first<<":"<<(*it).second<<endl;
}
第三种(第一种简化):
for(auto it=mp.begin();it!=mp.end();it++){
cout<<(*it)first<<":"<<(*it).second<<endl;
}
第四种(终极方法,第三种再简化):
for(auto it:mp){
cout<<cout<<it.first<<":"<<it.second<<endl;
}
数组遍历方法:
int n=5;
int a[100005];
for(auto num:a){
cout<<num<<" ";
}
#include <bits/stdc++.h>
using namespace std;
map<string,int>mp={{"apple",5},{"banana",3},{"orange",7}};
int main(){
cout<<mp.size(); //返回map中元素的个数
if(mp.empty()){ //如果map为空,则返回真,否则为假
cout<<"空";
}else{
cout<<"非空";
}
//mp["pear"]=10; //第一种方式插入
mp.insert({"pear",10}); //插入 第二种方式插入
mp.erase("apple"); //删除键值对
auto it=mp.find("banana"); //查找特定键对应的迭代器,如果不存在,则返回end()
if(it!=mp.end()){
mp.erase(it);
}
return 0;
}
set:
set<类型名>变量名
插入:
set<类型名>val;
val.insert(2);
例子:
set<int>val;
val.insert(4);
val.insert(2);
val.insert(1);
val.insert(3);
val.insert(1);
cout<<val.size();
set遍历:
1.最简单的方法
set<int>::iterator it;
for(it=val.begin();it!=val.end;it++){
cout<<<*it<<" ";
}
2.简化第一种
for(auto it=val.begin();it!=val.end();it++){
cout<<*it<<" ";
}
3.终极方法,再简化第二种
for(auto it:val){
cout<<it<<" ";
}
结构体:
struct node{
string name;
int id;
double score;
}
node*p=&node;
^ ^
| |
定义了 获取node
一个n 这个变量
ode类 的地址
型的指
针变量
(存地
址的
变量)
数位分离:
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
while(n!=0){
cout<<n%10;
n/=10;
}
return 0;
}
数字反转:
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int t=0;
int sum=1;
while(n!=0){
t=t*10+n%10;
n/=10;
}
cout<<t;
return 0;
}
桶排序:
#include <bits/stdc++.h>
using namespace std;
int n;
int a[101];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int x;
cin>>x;
a[x];
}
for(int i=1;i<=100;i){
for(int j=1;j<=a[i];j++){
cout<<i<<' ';
}
}
return 0;
}
这里空空如也





















有帮助,赞一个