零基础学C/C++171——年龄排序(类型参数化做法)

本文介绍了一个使用C++实现的结构体排序程序示例,通过定义结构体并使用泛型模板函数进行数据成员的交换,实现了对学生信息按特定条件的排序。

#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
//ios::sync_with_stdio(false);
struct node{    //结构体
    int n,y;
    string a,x;
}stu[105];
/*
用char a[105],x[105]; 
template<class M>
void Swap(M *x, M *y)
{
    M tmp= *x;
    *x = *y;
    *y = tmp;
    注释的这种写法只能交换姓名的第一个字符(不可取),因为指针只指向第一个char字符
    但是也可以用*x*y指针,用三个strcpy函数交换 
}
*/
template<class M>//申明类型参数化、可以忽略类型
void Swap(M &x, M &y)//这里就可以用无类型的变量取地址来交换啦
{
    M tmp= x;
    x = y;
    y = tmp;
}
template<class N>
void SSwap(N &x, N &y)
{
    N q = x;
    x = y;
    y = q;
}
int main()
{
    int i,j,k,n,m;
    cin>>n;
    getchar();
    for(i=1;i<=n;i++)
    {
        cin>>stu[i].a>>stu[i].x>>stu[i].n>>stu[i].y;
    }
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n-i;j++)
        {
            if(stu[j].n<stu[j+1].n||(stu[j].n==stu[j+1].n && stu[j].y<stu[j+1].y))
            {
                Swap(stu[j].a,stu[j+1].a);//之前写的时候考虑到数组交换和数字交换的不同,当时也是在尝试,现在不需要区分Swap和SSwap之间的区别,都一样的。
                Swap(stu[j].x,stu[j+1].x);
                SSwap(stu[j].n,stu[j+1].n);
                SSwap(stu[j].y,stu[j+1].y);
            }    
        }
    }
    for(i=1;i<=n;i++)
    {
        cout<<stu[i].a<<" "<<stu[i].x<<" "<<stu[i].n<<" "<<stu[i].y<<endl;
    }
    return 0;
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值