我是编程新手。我的目标是不使用STL在C ++中实现煎饼分类。我有3个班级,分别是pancake
,pancakepile
和MpancakePiles
。我对访问对象数组有疑问。我的代码如下:
但是,我不知道如何访问对象数组,例如,如果要处理???
内的对象数组size
,应该填充pancake P
区域中的内容。 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);
......
}
}
答案 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;
}
}