本篇文章主要讲解一些stl库中的一些常用函数,有些没有写全,欢迎评论区补全哦
目录
max_element(a,a+n)和min_element(a,a+n)
首先当然是最好用的万能头文件啦:#include<bits/stdc++.h>
<bits/stdc++.h>
这个头文件中包含了绝大部分我们所需要的头文件,比如stdio.h algorithm math.h 等等
当然在使用它时记得要配合using namespace std; 使用哟,这是因为using namespace std; 这样命名空间std内定义的所有标识符都有效(曝光)。但这又会带来了一个新问题。无数原有的C++代码都依赖于使用了多年的伪标准库中的功能,他们都是在全局空间下的。所以就有了<iostream.h>和<iostream>等等这样的头文件,一个是为了兼容以前的C++代码,一个是为了支持新的标准。命名空间std封装的是标准程序库的名称,标准程序库为了和以前的头文件区别,一般不加".h",也可以用 命名空间名::变量名 这种方法访问
iostream:
iostream头文件包含了我们经常用到的cin和cout语法
cin就是相当于scanf,用来从键盘获取数据的,cout相当于printf,是用来输出的
而endl相当于\n换行,不过也要配合cout使用例如:cout<<endl;
当然cout也是可以控制输出精度的例如cout<<fixed<<setprecision(2)<<55.123456<<endl;
在这里就不在深入了
algorithm:
该头文件中包含了我们经常使用的sort函数,reverse函数,max_element函数,min_element函数,lower_bound函数,upper_bound函数,find函数,binary_search,swap函数等等
这基本都是我们比较常见的函数了
sort函数:
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[]={6,5,4,3,2,1};
sort(a,a+6);
for(int i=0;i<6;i++){
cout<<a[i]<<" ";
}
//打印出的结果就是1 2 3 4 5 6啦
return 0;
}
reverse函数:
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[]={6,5,4,3,2,1};
reverse(a,a+6);
for(int i=0;i<6;i++){
cout<<a[i]<<" ";
}
//打印出的结果就是1 2 3 4 5 6啦
return 0;
}
max_element(a,a+n)和min_element(a,a+n)
当然这里的a+n中的n是你所想要查询的范围,也就是说如要你要查询前四个数中最大值就直接max_element(a,a+4)就可以啦,当然你也可以查询1-4中最大值那就直接max_element(a+1,a+4)就可以啦,min_element函数也是一个道理
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[]={16,54,4,30,28,1};
cout<<*max_element(a,a+6)<<endl; //这里输入最大值为54
cout<<*min_element(a,a+6)<<endl;//这里输出最小值为1
return 0;
}
low_bound函数和upper函数
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[]={16,54,4,30,28,1};
sort(a,a+6);
int t=lower_bound(a,a+6,16)-a;//注意这个函数要在有序的情况下使用哟
//其实lower_bound函数就是返回第一个大于等于你的目的数的地址
//目的数就是函数中的最后一个数,在这个例子中是16
//而upper_bound函数就是返回第一个大于目的数的地址,注意要减去地址a哦
cout<<t;
return 0;
}
swap函数 :
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[]={1,2,3,4,5};
swap(a[0],a[1]);
for(int i=0;i<5;i++)
cout<<a[i]<<" ";// 输出2 1 3 4 5就交换啦
//当然啦也可以直接交换两个数
cout<<endl;
int b=5,c=10;
swap(b,c);
cout<<b<<" "<<c;//这里就输出10 5
}
string和string.h:
注意哟string头文件就是#include<string>哦,当然还有一个头文件是#include<string.h>,注意不要弄混了哟
先讲string吧,它里面包括的我们经常使用的就是find()函数和replace()函数,substr()函数
find函数
这个是在字符串中的用法
#include<bits/stdc++.h>
using namespace std;
int main(){
string str="abcdefg";
string ss="de";
int n=str.find(ss);//这里输出3,是因为find函数
//是在str字符串中找到第一个出现ss字符串中的第一个子母的下标
cout<<n<<endl;
string st="abd";
int t=str.find(st);//这里输出-1,因为在str中并没有abd这个字符串
//所以没有找到就返回-1啦
cout<<t;
}
这个是在vector(后面讲)中的用法
#include<bits/stdc++.h>
using namespace std;
int main(){
vector<int>ve;
int a[]={1,2,3,4,5,6};
for(int i=0;i<6;i++)
ve.push_back(a[i]);
int it;
it=find(ve.begin(),ve.end(),3)-ve.begin();//这里ve.begin()是ve的起始地址
//ve.end()是最后一个元素后面的地址,3在这里是你要查找的数
cout<<it;//输出2,注意你要是要获取下标一定要减去起始地址
//如果没有找到则会返回一个等于ve.size()的值,因为它已经找到最后了都没有找到
//比如说你要找7,那么会返回一个6,因为ve的最大数组下标就是5;
}
repalce函数
#include<bits/stdc++.h>
using namespace std;
int main(){
string str="abcdefg";
string st="bcd";
str.replace(str.find(st),3,"china");//replace一般配合find函数使用得到st第一个出现在str中的下标
//也叫地址,3,是你想要替换的长度,“china”是你想要替换的字符串
cout<<str;//这里输出achinaefg,你们可以自己改一下数字尝试一下
}
substr函数
#include<bits/stdc++.h>
using namespace std;
int main(){
string str="abcdefg";
string st;
st=str.substr(0,3);//0是起始地址,3是尾地址,不包括3 ,当然数据随便给,,
//但是要保证起始大于尾地址,并且确保不溢出
cout<<st;//这里输出abc
}
这里继续讲解string.h头文件中常用的库函数
strlen函数
#include<bits/stdc++.h>
using namespace std;
int main(){
char c[500],a[500],b[500];
b[500]='i love China';
cout<<sizeof(b)<<endl;//输出500,为什么呢?因为sizeof是计算b数组所占用的空间的大小的
//因为你b[500]表明你申请了500内存
//所以这就是为什么这要用到strlen函数的原因
//因为你不是每一个空间都被使用的
cin>>c;//这里我输入i love China
cout<<strlen(c)<<endl; //输出1,为什么呢?因为cin不能够读入空格
//遇到空格就输入停止了
//所以我们需要使用gets来读取数据
gets(a);
cout<<strlen(a);//这里输入12,空格也是占一个字符的
}
memset函数
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[500];
/*1 for(int i=0;i<10;i++){
cout<<a[i]<<" ";//这里输出0 0 9190016 0 0 0 1 0 9190000 0
//但是每一次输出都不一样哟,因为a数组没有赋值,这些数是随机分配的
}*/
/*2 memset(a,0,100);
for(int i=0;i<10;i++){
cout<<a[i]<<" ";//这里输出10个0
} */
a[10]={0,1,2,3,4,5,6,7,8,9};
memset(a,0,10);
for(int i=0;i<10;i++)
cout<<a[i]<<" ";//这里也输出10个0
//所以memset函数的作用一般都是用来初始化数组,即使有数也可以初始化
}
既然这里说了初始化函数,那么这里也将一下fill函数吧
fill函数
#include<bits/stdc++.h>
using namespace std;
int main(){
bool flag[500];
fill(flag,flag+50,false);
for(int i=0;i<10;i++)
if(flag[i]==false)cout<<"初始化成功"<<" "; //这里成功了
//一般memset函数应用于初始化数组为0,但是fill函数可以初始化成为任何值
}
strcmp函数
#include<bits/stdc++.h>
using namespace std;
int main(){
char str[]="HNUCM";
char str1[]="HNUCm";
if(strcmp(str,str1)==0) cout<<"相等哟"<<endl;
else if(strcmp(str,str1)<0)cout<<"str<str1"<<endl;
//这里输出str<str1,因为M<m的ASCII码
else cout<<"大于";
//所以strcmp的作用就是比较两个字符串,大于返回大于0的值
//等于返回等于0,小于就是返回小于0
}
ps:这几天比较忙更新可能比较少,见谅哈