蓝桥杯备赛笔记:
Day1.利用sort函数进行排序:
头文件:#include<algorithm>就是平常的算法头文件(或者使用万能头文件<algorithm>;
属于普通的库函数,时间复杂度一般为O(nlogn)。
操作样例:sort(a,a+n,*cmp)即(起始地址,结束地址的下一位,*比较函数)(在特殊容器中采用(迭代器的begin(),迭代器的end(),比较函数)的形式)
作用:对选中区域内的数据进行排序,排序方法采用cmp(自定义排序方法),若无特殊的排序方法要求则会默认按照从小到大的顺序进行排序;
2.自定义排序(cmp函数):
定义:为管理员构造的函数,为bool类型的排序函数;
操作方法:
bool(a,b){
return a<b;}
3.对结构体中的元素进行排序:
合理的利用sort函数可以通过定义好的排序准则(cmp)对已经定义过的结构体函数中的元素进行排序,
举例如下:
图例是利用sort函数对student结构体中的成绩这一变量进行排序,在利用sort函数对结构体进行排序时,一定要声明排序准则。否则在运行时会报出未声明的方法这一错误;
Day2
输入与输出的精细化分类:
在c++中cin和cout的输入输出效率很低(因为需要自动判断变量类型),远低于c中的scanf和printf,并且不能对数组中的数据进行连续输入。但我们有一种办法:通过取消同步流使得c++std标准输入具有和scanf和printf同样的输入效率。
示例代码:ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//在使用此代码对于数据流进行解除禁制后,可以对数组进行字符串的输入。
示例代码:
#include<iostream>
using namespace std;
int main(){
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
char chararray;
cin>>chararray ; **//此时用cin就可以正常的对字符数组进行输入了**
cout<<chararray;
}
演示输入:hello world;
输出:
注:使用cin输入时读到\n会直接结束读取;
**但是如果想要不结束读取的话可以 采用正则表达式或get line进行排除**:
方法如下:
1.getline ()
2.cin>>"^\n,a";
Day3:二分查找与大小写转换
1.二分查找:
使用函数:c++自带的库函数(用<iostream>或者<bits/stdc++.h>)
查找要求:
1.查找对象必须为数组或可以转化为数组(如vector容器)
2.数组中的元素必须单调(单调递增或者单调递减都可以,但一般采用单调递增形式)
3如何利用代码实现数组中的二分查找?
1.采用binary_search函数:
binary_search函数用来进行二分查找,通常情况下返回的值为bool类型,用来表示目标是否存在于队列之中。
代码实现:
```
#include<bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
vector<int>vc={1,567567,234234,6786734,345345,1223,553,456};
sort(vc.begin(),vc.end());
int x;
cin>>x;
cout<<(binary_search(vc.begin(),vc.end(),x))<<endl;
}
运行结果如下:
2.采用lower_bound或者upper_bound函数进行查找:
lower_bound:在数组中进行对输入目标的查找,查找时查找到第一个大于等于此数的数在数组中的位置并且返回
upper_bound:在数组中进行对输入目标的查找,查找时查找到第一个大于此数的数在数组中的位置并且返回
若没有找到位置的话则会返回数组的下一位,容器则是返回.end()。
使用前提:数组为***非降序**数组
代码实现如下:
```
#include<bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
vector<int>vc={1,567567,234234,6786734,345345,1223,553,456};
sort(vc.begin(),vc.end());
int x;
cin>>x;
cout<<(lower_bound(vc.begin(),vc.end(),x)-vc.begin())<<endl;
}
```
输入:
```
345345
```
2.大小写转换:
###### model1:大小写的检查与查找:
采用函数:islower/isupper函数
采用头文件:<cctype>或万能头文件<bits/stdc++.h>
函数作用:检查所指定的内容是否为函数所指定格式并返回一个bool类型的值:
如:islower用来检查格式是否为小写,isupper用来检查格式是否为大写。
代码实现:
```
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
char c;
cin>>c;
if(islower(c))
cout<<"is a lowercase letter"<<endl;
else
cout<<"is a uppercase letter"<<endl;
}
```
输入:
```c++
a
```
输出结果:
```c++
is a lowercase letter
```
###### model2:格式大小写的转换:
采用函数名:tolower/toupper函数
采用函数所需的头文件:c++标准库函数
函数作用:对指定的函数进行大小写的转换(tolower指转化为小写,toupper指转化为大写)
###### *注意:如果原字符已为大写/小写则操作不生效。
代码实现:
```
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
char c;
cin>>c;
c=toupper(c);
cout<<c;}
输入:a
输出:A