#2020寒假集训#C++STL-algorithm代码笔记
程序员文章站
2022-06-02 12:33:24
...
#include<stdio.h>
#include<iostream>
#include<bits/stdc++.h>//万能头文件
#include<string>
#include<algorithm>//算法头文件
using namespace std;
struct student
{
string name;
int num;
int score;
}xs[5];
bool cmp(student a,student b)
{
if(a.score!=b.score) return a.score>b.score;
else
{
if(a.num!=b.num) return a.num<b.num;
else return a.name>b.name;
//如果是C的char字符串则应该用strcmp函数比较,但string可以直接比字典序大小
}
}
int main()
{
xs[0].name="zxl",xs[0].num=12009,xs[0].score=100;
xs[1].name="lhy",xs[1].num=12008,xs[1].score=99;
xs[2].name="yr",xs[2].num=12016,xs[2].score=98;
printf("\n");
int a=1,b=2,c=3;
printf("输出原始定义的a:%d,b:%d\n\n",a,b);
swap(a,b);//交换a和b的值
printf("输出用swap(a,b);交换后的a:%d,b:%d\n\n",a,b);
int big=max(a,b);//定义的时候注意变量名不要用max!!!
int small=min(a,min(b,c));
printf("用big=max(a,b);输出a和b中的较大值:%d\n\n",big);
printf("用small=min(a,min(b,c)); 输出a、b和c中的最小值:%d\n\n",small);
//max和min函数可用嵌套的方法求多个元素的最值,非数值型的如字符,按字典序
string fz="zxlwsry";
reverse(fz.begin(),fz.end());
cout<<"用reverse(it1,it2);反转[it1,it2)区间内的元素:"<<fz<<endl<<endl;
//此处等于是把string倒序输出了 ,注意区间左闭右开
int num[100];
fill(num,num+5,233);
fill(num+5,num+10,555);
for(int i=0;i<10;i++)
{
if(i!=0) printf(" ");
else printf("用fill(x+m,x+n,a)给x[m]到x[n-1]区间内的元素赋任意值a:");
//[m,n)还是左闭右开的思想
printf("%d",num[i]);
}
printf("\n\n");
int pl[5];
pl[0]=1,pl[1]=2,pl[2]=3,pl[3]=3,pl[4]=6,pl[5]=5;
next_permutation(pl,pl+3);
printf("输出1 2 3的下一组排列:%d %d %d\n\n",pl[0],pl[1],pl[2]);
/*
1 2 3的下一组排列是1 3 2用了next_permutation后,新的排列按顺序赋值给元素
next_permutation(pl+m,pl+n);处理范围还是左闭右开的[m,n)
*/
//现在的pl数列是1 3 2 3 6 5
printf("用lower_bound(first,last,val);寻找[first,last)中第一个大于等于val的位置的元素:%d\n\n",*lower_bound(pl+2,pl+5,3));
/*
数组名是首地址!!!first和last可用数组名+n表示
lower_bound(first,last,val);返回的是地址,*取值后得到值
*/
printf("用upper_bound(first,last,val);寻找[first,last)中第一个大于val的位置的元素:%d\n\n",*upper_bound(pl+2,pl+5,3));
sort(pl,pl+6);//sort默认升序
for(int i=0;i<6;i++)
{
if(i!=0) printf(" ");
else printf("输出sort升序排序后的pl数组:");
printf("%d",pl[i]);
}
printf("\n\n");
sort(xs,xs+3,cmp);
for(int i=0;i<3;i++)
{
if(i!=0) printf(" ");
else printf("输出sort升序排序后的xs结构体数组:");
cout<<xs[i].name<<" "<<xs[i].num<<" "<<xs[i].score;
if(i!=2) cout<<";";
}
printf("\n\n");
//再用一下上面名为fz的string"zxlwsry",先反转回来
reverse(fz.begin(),fz.end());
cout<<"用反转回来的fz字符串:"<<fz<<endl<<endl;
sort(fz.begin()+1,fz.begin()+4);
cout<<"输出下标[1,4)区间对应字符被排序后的fz字符串:"<<fz<<endl<<endl;
//注意()内用到还是迭代器,输出的提示文字表述的时候,用下标来形容啦
return 0;
}
运行结果如下
下一篇: 2018.7.26第二场T1题解