如何在C ++中访问对象数组?

时间:2019-01-29 10:33:25

标签: c++

我是编程新手。我的目标是不使用STL在C ++中实现煎饼分类。我有3个班级,分别是pancakepancakepileMpancakePiles。我对访问对象数组有疑问。我的代码如下:

  • 我的煎饼堆是3D堆,Z是高度。
  • 所以对于一个煎饼堆,它有Z个煎饼。
  • 我需要找到这些Z煎饼的最大尺寸索引。

但是,我不知道如何访问对象数组,例如,如果要处理???内的对象数组size,应该填充pancake P区域中的内容。 Max是已定义的函数。 没有不使用STL的特殊原因。 N是静态大小N=512burnt=0表示烧毁的一面朝下。

int Max(int size[], int n)
{
    int mi,i;
    for(mi=0,i=0;i<n;i++)
        if(size[i]> size[mi])
            mi=i;
    return mi;
}


class pancake
{
  public:
    int size;
    bool burnt;
    void flip_pancake()
    {
      burnt=~burnt;
    }
};


class pancakepile
{
  public:
    pancake P[N];
    int Z;  
    void pan_sort_ascending()
     {

       int mi=Max(???,Z);
         ......
     } 

}

2 个答案:

答案 0 :(得分:2)

您放弃了pan_sort_ascending的当前实现,并用对std::sort的调用来代替,传递了一个函数,该函数描述了两个煎饼中的哪个应该低于另一个煎饼。

#include <algorithm>

// A pancake is smaller than another if it's size is less
bool pancake_less(const pancake & lhs, const pancake & rhs)
{
    return lhs.size < rhs.size;
}

// sorts smallest first
void pancakepile::pan_sort_ascending()
{
    std::sort(P, P + Z, pancake_less);
} 

现在,如果您想使用pan_sort_descending,则只需翻转比较逻辑即可

// A pancake is larger than another if it's size is greater
bool pancake_greater(const pancake & lhs, const pancake & rhs)
{
    return lhs.size > rhs.size;
}

// sorts largest first
void pancakepile::pan_sort_descending()
{
    std::sort(P, P + Z, pancake_greater);
} 

答案 1 :(得分:0)

我不确定您想要什么,但是如果您只想返回煎饼列表中最大的煎饼,则可以在pancakepile类中实现成员函数:

class pancakepile
{
public:

pancake P[N];
int Z;  
void pan_sort_ascending()
 {

   int mi=max();
     ......
 } 

pancake max()
{
pancake bigestPancake;
foreach(pancake pan, P)
{
if(bigestPancake.Z < pan.Z)
bigestPancake = pan;
}
return bigestPancake;
}
}

编辑: 如果您想获取bigestPancake的索引,则可以改为:

class pancakepile
    {
    public:

pancake P[N];
int Z;  
void pan_sort_ascending()
 {

   int mi=max();
     ......
 } 

int max()
{
int bigestPancakeIndex;
for(int i = 0; i < P.size(); i++)
{
if(P[bigestPancakeIndex].Z < P[i].Z)
bigestPancakeIndex= i
}
return bigestPancakeIndex;
}
}