放一张目录图吧,方便按需查找。
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、创建一个包含500个Widget类型数据的vector:
vector<Widget> vWidgets(500);
3、创建一个包含500个Widget类型数据的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;