如何在 c++ 中访问对象数组

How to access the object array in c++?

本文关键字:访问 对象 数组 c++      更新时间:2023-10-16

我是编程新手。我的目标是在不使用STL的情况下实现C++煎饼排序。我有3个班级,它们是pancakepancakepileMpancakePiles。我有一个关于访问对象数组的问题。我的代码如下:

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

但是,我不知道如何访问对象数组,例如如果要在pancake P内处理对象数组size,我应该在???区域中填写什么。 Max是一个已定义的函数。不使用STL没有特别的理由。 N是静态大小,N=512 . burnt=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);
         ......
     } 
}

你扔掉了你当前的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);
} 

我不确定你想要什么,但是如果你只想返回煎饼列表中最大的煎饼,我会在煎饼堆类中实现一个成员函数:

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;
}
}

编辑:如果你想得到最大的煎饼的索引,你可以这样做:

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;
}
}