背景:我正在尝试实现一个国际象棋游戏。 实现如下(->表示每片包含一个点) 棋盘 -> (列表)棋子 -> 点
一般来说,我的问题是我有一个指向自定义类(Piece)的指针列表。 我想根据其中一个字段(他的点 - 他所在的位置)找到某个片段。
如果我尝试这样找到他:
PieceList::const_iterator itPiece = find(_onePieces.begin(),_onePieces.end(),constSearchPiece);
我相信我得到了错误的答案,因为发生的事情是我正在比较两个元素指向的单元格而不是它们的内容。
注意:我已经为我的自定义类(Piece 和 Point)创建了一个 operator==
。
另一个注意事项:我需要将该片段作为 const 获取,因为它位于 const 函数中。
我尝试实现自己的搜索功能:
PieceList::const_iterator constPieceFind(PieceList pList, Piece p) const{
PieceList::const_iterator iter;
for( iter =pList.begin(); iter !=pList.end(); iter++){
if (**iter == p)
return iter;
}
return pList.end();
}
虽然该函数运行良好并找到了所需的片段,但当我检查调用该函数的迭代器时,它是空白的。
我应该怎么做才能解决这个问题?
最佳答案
您的函数采用 pList
参数按值。这意味着 PieceList
容器在传递给函数时被复制,并且 constPieceFind
中使用的迭代器都引用该容器的本地拷贝。当函数返回时拷贝被销毁,并且返回的迭代器不再指向有效内存。更改函数,使其采用 pList
参数通过引用。
PieceList::const_iterator constPieceFind(PieceList const& pList, Piece p) const
// ^^^^^^
您可能还想对第二个参数执行相同的操作以防止不必要的复制,尽管这不是让您的代码正常工作所必需的。
关于c++ - 如何在指向自定义类的指针列表中找到元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24370874/