标题:我想采用值传递的方式将Person Arr[5]这个结构体数组传到socring这个函数里 ...
只看楼主
海绵宝宝lyy
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-10-25
结帖率:33.33%
已结贴  问题点数:10 回复次数:5 
我想采用值传递的方式将Person Arr[5]这个结构体数组传到socring这个函数里面,但不知道为什么不可以
#include<iostream>
#include<string>
using namespace std;
struct Person
{
    string Name;
    int a[5];
};
int socring(Person Arr[])
{
    for(int i=0;i<5;i++)
    {
        for(int j=1;j<=5;j++)
        {
        for(int k=0;k<j-1;k++)
        {
            if(Person Arr[i].a[k]<Person Arr[i].a[k+1])
            {
                int n=Person Arr[i].a[k];
                Person Arr[i].a[k]=Person Arr[i].a[k+1];
                Person Arr[i].a[k+1]=n;
            }
        }
        }
    }
}
int main()
{
    Person Arr[5];
    for(int i=0;i<5;i++)
    {
        string name;
        int b[5];
        cin>>name;
        Arr[i].Name=name;
        for(int k=0;k<5;k++)
        {
            cin>>b[k];
            Arr[i].a[k]=b[k];
        }
    }
    socring(Person Arr[5]);
    return 0;
}
搜索更多相关主题的帖子: Person int 结构体 for Name 
2020-11-09 16:10
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:4 
注意,以下代码不是我写的,我只是改了一些错误
程序代码:
#include <iostream>
#include <string>
using namespace std;

struct Person
{
    string Name;
    int a[5];
};

void socring( Person Arr[] )
{
    for(int i=0;i<5;i++)
    {
        for(int j=1;j<5;j++)
        {
            for(int k=0;k<5-j;k++)
            {
                if( Arr[i].a[k]< Arr[i].a[k+1])
                {
                    int n = Arr[i].a[k];
                    Arr[i].a[k] = Arr[i].a[k+1];
                    Arr[i].a[k+1] = n;
                }
            }
        }
    }
}

int main( void )
{
    Person Arr[5];
    for(int i=0;i<5;i++)
    {
        string name;
        int b[5];
        cin>>name;
        Arr[i].Name=name;
        for(int k=0;k<5;k++)
        {
            cin>>b[k];
            Arr[i].a[k]=b[k];
        }
    }
    socring( Arr );

    cout << "-----------------------------\n";
    for( size_t i=0; i!=5; ++i )
    {
        cout << Arr[i].Name;
        for( size_t j=0; j!=5; ++j )
            cout << ' ' << Arr[i].a[j];
        cout << '\n';
    }
}

注意,以上代码不是我写的,我只是改了一些错误

假如用正儿八经的C++写,那应该是
程序代码:
#include <iostream>
#include <string>
#include <algorithm>

struct Person
{
    std::string name;
    int a[5];
};

std::istream& operator>>( std::istream& is, Person& p )
{
    Person t;
    if( !(is>>t.name) )
        return is;
    for( auto& v : t.a )
        if( !(is>>v) )
            return is;
    p = std::move(t);
    return is;
}

std::ostream& operator<<( std::ostream& os, const Person& p )
{
    os << p.name;
    for( const auto& v : p.a )
        os << ' ' << v;
    return os;
}

template<size_t N>
void socring( Person (&Arr)[N] )
{
    for( auto& p : Arr )
        std::sort( std::begin(p.a), std::end(p.a), std::greater<decltype(p.a[0])>() );
}

using namespace std;

int main( void )
{
    Person Arr[5];
    for( auto& p : Arr )
        cin >> p;

    socring( Arr );

    cout << "-----------------------------\n";
    for( const auto& p : Arr )
        cout << p << '\n';
}
2020-11-09 16:48
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:4 
回复 2楼 rjsp
for( const auto& v : p.a )
for( auto& p : Arr )

这句话是啥意思?

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2020-11-11 09:33
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 3楼 纯蓝之刃
for( const auto& v : p.a )
{
    ……
}
相当于
for( auto itor_=begin(p.a); itor_!=end(p.a); ++itor_ )
{
    const auto& v = *itor_;

    ……
}
少写了很多代码
2020-11-11 09:45
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
现在 打不开,我没法发网址给你

标准是这么说的:
属性(可选) for ( 初始化语句(可选)范围声明 : 范围表达式 ) 循环语句
相当于
{
    初始化语句
    auto && __range = 范围表达式;
    auto __begin = 首表达式;
    auto __end = 尾表达式;
    for ( ; __begin != __end; ++__begin) {
        范围声明 = *__begin;
        循环语句
    }
}
2020-11-11 09:52
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
得分:4 
回复 3楼 纯蓝之刃
我帮 rjsp 找了下
https://en.
2020-11-11 14:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-503840-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013599 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved