Day 10
结构体上
1.结构体中如果有数组成员要一个个输入。
2.排序
sort(a,a+n,compare);//初始地址,结束地址,比较规则
/* 降序排列1
#include<functional>
sort(arr,arr + n, greater<int>());
2 lambda 表达式(仅供一次性使用)
sort(a,a+m,[](stu &a,stu &b){return a.grade>b.grade;});
[capture(必选)](parameters(必选)) -> return_type (可选){ function_body }(必选)
[] 不捕获任何外部变量 仅用参数(如 sort 排序)
[&] 引用捕获所有外部变量(可修改) 需要用多个外部变量且修改
[=] 值捕获所有外部变量(只读,不可修改) 需要用多个外部变量但不修改
[x] 值捕获单个外部变量 x(只读) 仅用变量 x
[&x] 引用捕获单个外部变量 x(可修改) 仅用变量 x 且需要修改
*/
3.当结构体中有string类型和普通数据类型以及多个结构体输入时
for(int i=0;i<n;i++){
getline(cin,arr[i].name);
cin>>arr[i].price;
cin.ignore();
}
4.典型例题
“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。
#include<iostream>
using namespace std;
struct help{
int gender;
string name;
bool group;
};
int main(){
int n;
cin>>n;
help *a=new help[n];
for(int i=0;i<n;i++){
cin>>a[i].gender>>a[i].name;
a[i].group=false;
}
for(int i=0;i<n;i++){
if(a[i].group){
continue;
}
int find=-1;
for(int j=n-1;j>=0;--j){
if(!a[j].group&&a[j].gender!=a[i].gender){
find=j;
break;
}
}
a[i].group=true;
a[find].group=true;
cout<<a[i].name<<" "<<a[find].name<<endl;
}
delete []a;
return 0;
}
