我对 STL 的工作原理不是很了解。
我能够创建一个列表并向其中添加项目。
但现在我似乎无法在列表中搜索以找到具有所需属性的元素。
原谅我这方面的无知。我是 STL 的新手,但我仍然难以理解 C++ 的某些元素。
这是代码。我知道它会产生错误,但我想要这样的东西。
提前致谢。
extern list<MonsterClass> Monsters;
MonsterClass FindMonster(int x)
{
MonsterClass Monster;
list<MonsterClass>::iterator ListItem;
for(ListItem = Monsters.begin(); ListItem != Monsters.end(); ++ListItem)
{
if (ListItem.X == x)
{
Monster = ListItem;
return Monster;
}
}
return NULL;
}
最佳答案
您混淆了元素和迭代器。迭代器是列表中位置的占位符,它们不是元素本身。要获取元素,您需要取消引用迭代器:
if ((*ListItem).X == x) // or, easier: if(ListItem->X == x)
{
Monster = *ListItem;
return Monster;
}
}
此外,您不能返回 NULL
因为你的 Monster
类不能取值 NULL
(这是一个指针)。您可以 做的是返回一个迭代器而不是项目本身。那么你的函数几乎与 std::find
完全一样。来自 <algorithm>
的功能标准标题。
关于c++ - STL <list> 搜索列表以查找项目属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5476589/