看到各种大牛用了各种方法- -好厉害
顺便科普了宏是什么= =虽然实践的并不是很好- -
vector的用法:
#include <vector>
vector<int>test;//建立一个空的vector
test.push_back(1);
test.push_back(2);//把1和2压入vector,这样test[0]就是1,test[1]就是2
//或者说将一个值当成vector对象的尾元素“压到(push)”vector对象的“尾端(back)” ,会扩展vector的大小
关于vector的初始化和赋值还有:
vector<string>abc{"a","b","c"};//不用写等号
vector<int>abc(10,1);// 包含10个元素,且值为1
vector<int>abc{10,1};// 包含2个元素,值分别为10,1
for(int i = 0; i < 10; ++i)
abc[i] = i;//对于非空的vector,可以用下标添加数值
//size()函数显示向量的大小。
//begin()函数返回一个指向向量开头的迭代器。
//end()函数返回一个指向向量末尾的迭代器。
sort的用法:
#include <algorithm>
sort(v1.begin(),vi.end(),comp);//用sort函数排序,排序依据是返回值为布尔型的comp函数(比较两个或多个文件)
迭代器的用法:
vecter<int>exp;
vector<int>::iterator iter=exp.begin();
if(iter!=exp.end()){
cout<<(*iter)<<endl;
iter++;
}
//两者的区别主要是后者类似于常量指针,只能读取不能修改。如果vector对象不是常量,两者均可使用。
strcmp的用法:
strcmp(A,B); // 比较两个字符串大小,相等返回0,A比B大返回正数,反之负数。
指针数组:
从指针传递给函数:
从函数返回到指针?
折腾了很久发现自己用数组傻傻的做根本做不出来……
还是学习了大神的作品 终于AC 用到一些还没接触过的STL 继续学习吧!
#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
struct Student{
char id[10];
int mor;
int tal;
};
bool comp(Student a,Student b)
{
if((a.mor+a.tal)!=(b.mor+b.tal))
return a.mor+a.tal>b.mor+b.tal;
else
{
if(a.mor!=b.mor)
return a.mor>b.mor;
else
return strcmp(a.id,b.id)<0;
}
}
//当某类考生中有多人
//总分相同时,按其德分降序排列;
//若德分也并列,则按准考证号的升序输出。
int main()
{
int count=0;
vector<Student>v1,v2,v3,v4;
Student students;
int N,L,H;
scanf("%d%d%d",&N,&L,&H);
for(int i=0;i<N;i++)
{
scanf("%s%d%d",students.id, &students.mor,&students.tal);
if(students.mor>=L && students.tal>=L)
{
count++;
if(students.mor>=H && students.tal>=H)
v1.push_back(students);
else if(students.mor>=H && students.tal<H)
v2.push_back(students);
else if(students.mor<H && students.tal<H && students.mor>=students.tal)
v3.push_back(students);
else
v4.push_back(students);
}
}
sort(v1.begin(),v1.end(),comp);
sort(v2.begin(),v2.end(),comp);
sort(v3.begin(),v3.end(),comp);
sort(v4.begin(),v4.end(),comp);
printf("%d\n",count);
vector<Student>::iterator iter;//迭代器遍历vector
for(iter=v1.begin();iter!=v1.end();iter++)
printf("%s %d %d\n",iter->id,iter->mor,iter->tal);
for(iter=v2.begin();iter!=v2.end();iter++)
printf("%s %d %d\n",iter->id,iter->mor,iter->tal);
for(iter=v3.begin();iter!=v3.end();iter++)
printf("%s %d %d\n",iter->id,iter->mor,iter->tal);
for(iter=v4.begin();iter!=v4.end();iter++)
printf("%s %d %d\n",iter->id,iter->mor,iter->tal);
return 0;
}