gpt4 book ai didi

c++ - 如何比较两个充满类的 STL 列表

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:16:18 24 4
gpt4 key购买 nike

我正在为我的 C++ 类编写程序,但遇到了一个问题。对于这个项目,我必须组建两支 super 队伍并进行战斗模拟。在我的 main.cpp 中,我为每个团队创建了两个列表,并用 3 个类填充它们,代表每个团队 3 个字符。在类里面,我有属性,其中一个属性是“双倍速度”。我对这两个团队进行了排序,使列表中的第一个角色在每个团队中速度最快,然后是第二快的。现在是我坚持的部分。我现在必须进行模拟,让最快的整体角色首先出现,然后是下一个最快的。首先,我不知道如何将对面的队伍添加到我类(class)的列表中,其次,我不知道如何比较列表看谁先走。我在我的类(class)中创建了一个名为

的列表
list<super*>target

这是指针列表。当我像这样创建团队时,我试图将相反的团队添加到我的目标列表中:

for(int i = 0; i < 3; i++) {
hptr = new super;
vptr = new super;

TeamA.push_back(*hptr);
TeamB.push_back(*vptr);

hptr -> addtarget(vptr);
vptr -> addtarget(hptr);
}

但是我的 addtarget 函数出现错误:

void super::addtarget(super *tptr){

target.push_back(*tptr);

}

错误信息是:

error: no matching function for call to 'std::list<super*>::push_back(super&)'

我已经被这个问题困了好几天了,我似乎无法绕过它。我不想要关于如何执行此操作的确切代码,而只是一个良好的开端,因此我可以尝试弄清楚。

最佳答案

1.将 super 添加到列表中

TeamA.push_back(hptr);
TeamB.push_back(vptr);

我们从错误信息中可以看出,target列表存储了指向super对象的指针,所以应该使用target.push_back(tptr) 而不是 target.push_back(*tptr)tptr 指的是一个父类(super class)的指针。 *tptr 是一个 super 对象。

2.比较STL::list元素

您可以指定 a custom sort predicate .

bool compareSuper(const super* a, const super* b) {
return (a->speed) > (b->speed);
}

TeamA.sort(compareSuper); // TeamA is in decreasing order after sort
TeamB.sort(compareSuper); // TeamB is in decreasing order after sort

关于c++ - 如何比较两个充满类的 STL 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33204105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com