记录一下我遇到过的stl和函数(持续记录中)
stl
1.sort(快排)
sort函数的主要功能就是对给定区间内的所有元素进行排序。函数里面主要有三个参数(begin,end,cmp),begin是开始排序的元素的地址,end是结束排序的元素地址,cmp则为排序的方式,不写的话默认按升序排序。
我们可以举个例子
#include<bits/stdc++.h>
using namespace std;
int main(){
int arr[5]={3,1,4,2,5};
sort(arr,arr+5);
for(auto i:arr)cout<<i<<" ";
}
此时的输出结果就是
现在我们来讲一讲cmp,也就是我们可以自己手搓的排序准则。它是我们自定义的一个比较函数,通过bool类型判断返回排序方式,如果返回值是true则不交换前后两个值,放回值是false则交换前后两个值。
#include<bits/stdc++.h>
using namespace std;
bool cmp(int a,int b){
return a>b;
}
int main(){
int arr[5]={3,1,4,2,5};
sort(arr,arr+5,cmp);
for(auto i:arr)cout<<i<<" ";
}
在我们加了cmp的比较方式后输出的结果就变成了
2.rotate
rotate的主要作用是交换数组中的两个连续片段。它中间同样有三个参数(begin,middle,end),begin是第一个片段的开头的地址,middle是第一个片段开头的末尾兼第二个片段的开头的地址,end则是第二个片段的末尾的地址。如果我们对一个数组使用了rorate函数,那么位于[begin,middle)的元素就会移动到[middle,end)后面去。
#include<bits/stdc++.h>
using namespace std;
int main(){
int arr[5]={3,1,4,2,5};
rotate(arr,arr+2,arr+5);
for(auto i:arr)cout<<i<<" ";
}
在我们对数组arr使用rotate后arr[0,2)移动到了arr[2,5)的后面,此时数组arr就变成了{4,2,5,3,1},那么上述代码输出显然就为
3.max_elements
max_element的基本作用就是找到数组给定区间内的最大元素(如果有多个,则返回第一个最大值)的迭代器并返回。在常见的情况下,它内部有两个参数(end,begin),同样是数组元素你想选择的区间的开始和'结尾下一个'的元素的迭代器。
#include<bits/stdc++.h>
using namespace std;
int main(){
int arr[5]={3,1,4,2,5};
auto a=max_element(arr,arr+5);
cout<<*a;
}
此时输出的就是5,因为迭代器是连续记录的,所以我们可以利用这一点找出最大元素的下标。
#include<bits/stdc++.h>
using namespace std;
int main(){
int arr[5]={3,1,4,2,5};
auto a=max_element(arr,arr+5);
cout<<a-arr;
}
这样我们就成功输出了最大值元素的下标了。
查看8道真题和解析