一文教你熟练掌握C++刷题及其技巧
Posted William_Tao(攻城狮)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文教你熟练掌握C++刷题及其技巧相关的知识,希望对你有一定的参考价值。
C++刷题常用函数及技巧
C++常用知识点学习
万能头文件
基本包括了大部分的STL库函数,使用方便快捷
#include<bits/stdc++.h>
循环读入
while(cin>>n)
cout<<n<<endl;
求最大和最小值
int a,b,maxx,minn;
cin>>a>>b;
maxx= max(a,b);
minn = min(a,b);
cout<<"a和b中最大值为:"<<maxx<<endl<<"a和b中最小值为:"<<minn<<endl;
return 0;
交换变量值
int a,b,m;
cin>>a>>b;
swap(a,b);
cout<<"a和b交换之后的值为:"<<a<<":"<<b<<endl;
求绝对值
int a,b,m;
cin>>a>>b;
cout<<"a的绝对值为:"<<m<<endl;
查找(这两个函数必须首先要求数列有序)
lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
upper_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
int a[]=1,2,3,4,5;
cout<<lower_bound(a,a+4,3)-a<<endl;
cout<<upper_bound(a,a+4,3)-a<<endl;
输入/输出
int n=0;
cin>>n; //输入n
cout<<n<<endl; //输入n,外加换行
字符串
string s;
string t="m";
cin>>s;//不包括空格
getline(cin,s);//读取一行,可以包含空格
s.append(t);//将字符t添加到s
cout<<s+t; //同上述效果一样
//find(“字符串”) / find("字符串",postion) ---找不到就返回很大很大的数,可以与-1比较
if(s1.find(s2)==-1)
cout<<"在s1中未找到s2"<<endl;
cout<<s.find(t)<<endl; //找子序列t在s中出现的首次位置
cout<<s.find(t,2)<<endl; //从第二个位置开始找,找子序列t在s中出现的首次位置
int len = s.size();//字符串s的⻓度
int len = s.length();//字符串s的⻓度
cout<<*s1.begin()<<endl;//指向字符串的第一个元素
cout<<*(s1.end()-1)<<endl;//指向字符串的最后一个元素
reverse(s.begin(), s.end());//字符串反转
string s1 = "hello";
string sTemp=s1.substr(1);//下标1开始到结束
//截取substr(pos,num) ----在哪个位置截取,截取多少字符
string sTemp2 = s1.substr(1,3);//下标1开始,截取3个字符
cout<<sTemp<<"----"<<sTemp2<<endl;
cout<<s1[0]<<endl; //访问字符串的0处的位置
string s1,s2;
cin>>s1>>s2;
//两个字符串之间的大小关系
cout<<(s1==s2)<<endl;
cout<<(s1>s2)<<endl;
cout<<(s1<s2)<<endl;
//插入insert(position,"字符串")
s1.insert(1,"b");
cout<<s1;
//删除 erase(pos,num)----在哪个位置删除多少字符
s1.earse(1,2);
//将123456转为字符串
s1 = to_string(123456);
cout<<s1;
//将字符型1234转为int类型 ---string to int
int x=stoi("1234");
cout<<x<<endl;
栈(stack)
#include<stack> //要引入库函数
stack<int> s ;
for(int i=0;i<6;i++)
s.push(i);//入栈操作
cout<<s.top()<<endl; //访问s的栈顶元素
cout<<s.size()<<endl; 输出s的元素个数
s.pop(); // 删除栈顶元素但不返回其值
cout<<s.empty()<<endl; //非空返回0,是空返回1
队列(普通队列 -----优先队列)
普通队列
#include<queue>//要引入库函数
queue<int> s ;
for(int i=0;i<6;i++)
s.push(i);//将i元素接到队列的末端;
cout<<"首元素为:"<<s.front()<<endl; //访问队首元素
cout<<"队尾元素:"<<s.back()<<endl; 访问队尾元素
s.pop(); // 弹出队列的第一个元素,并不会返回元素的值;
cout<<s.empty()<<endl; //非空返回0,是空返回1
优先队列
暂时未看
集合(set)
⼀个
set
⾥⾯的各元素是各不相同的(重复元素自动删除),⽽且set
会按照元素进⾏从⼩到⼤排序
#include<set>
set<int> s;
s.insert(2);//插入元素
s.insert(100);//插入元素
for(int i=0;i<6;i++)
s.insert(i);//插入元素
//迭代变量set<int>::iterator it
for(set<int>::iterator it=s.begin();it!=s.end();it++)
cout << *it << " ";//集合的遍历,it是一个迭代的指针
//方法二:
for(auto v: s) cout<<v<<" ";
//输入结果:0 1 2 3 4 5 100
//按照从小到大排序,且删除相同元素
s.erase(3);//删除元素为3的
s.clear();//清空
s.size();//长度
s.empty();//判空
cout<<*s.find(2)<<endl; //查找某一个num值,返回的是迭代器,因此需要*来输出
multiset<int> mus;
mus.insert(1);
mus.insert(2);
for(int i=0;i<6;i++)
mus.insert(i);
for(auto v: mus) cout<<v<<" ";
//输出结果 0 1 1 2 2 3 4 5
map/字典/映射
map使用方括号直接访问
初次访问的映射自动插入0/默认值
map<int,int> mp;
int n;
cin>>n;
for(int i=1;i<=n;i++)
int x;
cin>>x;
mp[x] =i;
for(auto v: mp) cout<<v.first<<" : "<<v.second<<endl;
向量(vector)
#include<vector>
vector<int> test;//建立一个vector
test.push_back(1);
test.push_back(2);//把1和2压入vector,这样test[0]就是1,test[1]就是2
cout<<vec[0]<<endl;//使用下标访问元素
//使用迭代器访问元素.
vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;
vec.insert(vec.begin()+i,a);//在第i+1个元素前面插入a;
vec.erase(vec.begin()+2);//删除第3个元素
vec.erase(vec.begin()+i,vec.end()+j);//删除区间[i,j-1];区间从0开始
cout<<vec.size()<<endl;//向量大小
vec.clear();//清空
二维的vector
交流群
QQ群:1098392728
以上是关于一文教你熟练掌握C++刷题及其技巧的主要内容,如果未能解决你的问题,请参考以下文章