记录一下我遇到过的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;
}

这样我们就成功输出了最大值元素的下标了。

4.unique

全部评论

相关推荐

想当offer收割机...:我第一道一直写不出,第二道a了0.5,官网流程变成业务初试了
投递数字马力等公司10个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务