STL 中的常见实用库函数(适合初学算法者阅读)(持续更新中)

本篇文章主要讲解一些stl库中的一些常用函数,有些没有写全,欢迎评论区补全哦

目录

iostream:

algorithm:

 sort函数:

reverse函数:

 max_element(a,a+n)和min_element(a,a+n)

low_bound函数和upper函数 

swap函数 :

 string和string.h:

find函数

repalce函数 

substr函数 

strlen函数

memset函数

fill函数 

strcmp函数


首先当然是最好用的万能头文件啦:#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:这几天比较忙更新可能比较少,见谅哈

  • 8
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

H-rosy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值