C++ STL 常用函数

放一张目录图吧,方便按需查找。
在这里插入图片描述

STL之sort函数

时间复杂度是n*log2(n)

sort(begin,end);

sort(begin,end,cmp);

升序模式(默认)

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a[10];
	for(int i=0;i<10;i++)
	{
		a[i]=rand()%100;
	}
	 sort(a,a+10);//左闭右开,默认升序
	 for(int i=0;i<10;i++)
	 {
	 	cout<<a[i]<<' ';
	 }
	return 0;
} 

降序模式

1、加入greater();//greater<类型>()将大的放在前面

	 sort(a,a+10,greater<int>());

2、运用reverse(a,a+n)方法反转,sort默认升序,再用reverse反转,就成了降序

自定义模式

如果想按照自己的想法排序,如按绝对值降序

#include<bits/stdc++.h>
using namespace std;
bool cmp(int a,int b)//cmp是自己控制的方法
{
	return abs(a)>abs(b);
}
int main(){
	int a[10];
	for(int i=0;i<10;i++)
	{
		a[i]=rand()%100-50;
	}
	 sort(a,a+10,cmp);//函数提供第三个参数cmp使使用者按自己想法调用
	 for(int i=0;i<10;i++)
	 {
	 	cout<<a[i]<<' ';
	 }
	return 0;
} 

STL之unique函数

unique函数属于STL中比较常用函数,它的功能是元素去重。unique函数的去重过程实际上就是不停的把后面不重复的元素移到前面来,由于它”删除”的是相邻的重复元素,所以在使用unique函数之前,一般都会将目标序列进行排序。

 #include<bits/stdc++.h>
using namespace std;
int main(){
	int a[6]={1,3,3,2,2,2};
	sort(a,a+6);//先排序
	//unnique返回的是指针,指向最后一个不重复位置的下一个位置
	int num=unique(a,a+6)-a;//用num 来接受有多少个不重复数据
	 for(int i=0;i<num;i++)
	 {
	 	cout<<a[i]<<' ';
	 }
	return 0;
} 

STL之二分查找函数

二分查找要求数组递增;

binary_search

​ : 查找某个元素是否出现

a.函数模板:

binary_search(arr,arr+size,indx)

b.参数说明:

arr: 数组首地址
size:数组元素个数
indx: 需要查找的值

c.函数功能:

在数组中以二分法检索的方式查找,若在数组(要求数组元素非递减)中查找到indx元素则真,若查找不到则返回值为假。

 #include<bits/stdc++.h>
using namespace std;
int main(){
	int a[6]={1,2,3,2,2,2};
	sort(a,a+6);
	cout<<binary_search(a,a+6,3);//1

	return 0;

lower_bound

​ :查找第一个大于或等于某个元素的位置。

a.函数模板:

lower_bound(arr[],arr[]+size , indx):

b.参数说明:

arr[]: 数组首地址
size:数组元素个数
indx: 需要查找的值

c.函数功能:

函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置(注意是地址)。如果所有元素都小于val,则返回last的下一位置

 #include<bits/stdc++.h>
using namespace std;
int main(){
	int a[6]={1,2,3,2,2,2};
	sort(a,a+6);//[1,2,2,2,2,3]
	int cont=lower_bound(a,a+6,3)-a;//得到索引位
	cout<<cont;//5

	return 0;
} 

upper_bound:

​ 查找第一个大于某个元素的位置。

a.函数模板:

upper_bound(arr[],arr[]+size , indx):

b.参数说明:

arr[]: 数组首地址
size:数组元素个数
indx:需要查找的值

c.函数功能:

函数upper_bound()返回的在前闭后开区间查找的关键字的上界,返回大于val的第一个元素位置

 #include<bits/stdc++.h>
using namespace std;
int main(){
	int a[6]={1,2,3,2,2,2};
	sort(a,a+6);//[1,2,2,2,2,3]
	int cont=upper_bound(a,a+6,2)-a;
	cout<<cont;//5

	return 0;
} 

STL之vector容器

构造函数

1、创建一个int类型的空的vector对象:

vector<int> v;

2、创建一个包含500Widget类型数据的vector

vector<Widget> vWidgets(500);

3、创建一个包含500Widget类型数据的vector

vector<Widget> vWidgets(500);

4、创建一个包含25个char类型数据的vector,并将它们全部初始化为 ‘A’

vector<char> letters (25, 'A');

begin()函数与end() 函数

begin()函数的作用为取vi的首元素地址。end() 函数取的是尾元素地址的下一个地址。(左闭右开)

front()函数和back()函数

front()函数返回第一个元素,back函数,返回最后一个元素.

push_back()函数

push_back()函数表示将数据添加到vector的尾部,并按需要来分配内存。

pop_back()函数

pop_back()用于删除vector的尾元素

insert()函数

insert(v.begin()+inx,x)用来向vector的任意迭代器inx处插入一个元素X

erase()函数

1、删除单个元素。erase(it)即删除迭代器为it处的元素。

2、删除一个区间内的所有元素。erase(frist, last)即删除[frist, last) 内的所有元素。

at(idx)函数

传回索引idx所指的数据,如果idx越界,抛出out_of_range

empty()函数

判断容器是否为空,不为空则返回0,否则返回1;

迭代器 iterator

定义一个迭代器:

vector<int>::iterator it;
for(it=v.begin();it!=v.end();it++){
	cout<<*it<<endl;//取it对应的元素
}

实际操作

 #include<bits/stdc++.h>
using namespace std;
int main(){
vector<int> v;//定义一个容器
v.push_back(1); //插入数据  v[0]=1 
v.push_back(2);	//v[1]=2
v.push_back(3);  //v[2]=3
v.push_back(7);
 v.push_back(5);

for(int i=0;i<v.size();i++){//v.size()获取容器元素个数 
	cout<<v[i]<<" ";//v[i]获取某位置的数据值 
}
v.pop_back();//删除容器末尾的数据 
cout<<v.size()<<endl; 
v.insert(v.begin(),5);//在0位置处插入 元素5
	for(int i=0;i<v.size();i++){
	cout<<v[i]<<" ";
}
v.erase(v.begin());
for(int i=0;i<v.size();i++){
	cout<<v[i]<<" ";
}

cout<<v.at(1)<<endl;//at()函数获取索引处的数据 
cout<<v.empty()<<endl;//判断容器是否为空 

cout<<"第一个元素:"<<v.front()<<endl;
cout<<"最后一个元素:"<<v.back()<<endl; 

vector<int>::iterator it;//定义迭代器 
for(it=v.begin();it!=v.end();it++){
cout<<*it<<endl;//取it对应的元素
}

//可以用数组方法修改vector的值,
// 但不可以在vector未开辟内存前使用

v[1]=100; 
for(int i=0;i<v.size();i++){
	cout<<v[i]<<" ";
}

sort(v.begin(),v.end());//升序排序 
for(int i=0;i<v.size();i++){
	cout<<v[i]<<" ";
}
return 0;

STL之String容器

构造函数

1、生成一个空字符串s

string s;

2、拷贝构造函数生成str的复制品

string s(str); 

3、生成一个字符串,包含n个c字符

string s(n,c) ;

4、以区间begin():end() (不包含end())内的字符作为字符串s的初值

 string s(str.begin(),str.end()) ;

push_back()函数

在字符串末尾插入字符

s1.push_back('a');

append()函数

字符串拼接

s1.append(s2);//在s1后拼接s2,并返回给s1;

insert()函数</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值