c++ - 如何在指向自定义类的指针列表中找到元素

标签 c++ find std stdlist

背景:我正在尝试实现一个国际象棋游戏。 实现如下(->表示每片包含一个点) 棋盘 -> (列表)棋子 -> 点

一般来说,我的问题是我有一个指向自定义类(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/

相关文章:

c++ - 为 mac/linux 编译时 std::pair 出错

c++ - 带有 std::function 参数的重载运算符

c# - 您如何通过 WiFi 或 LAN 网络在不同的机器上验证 Windows 用户凭据?

C++ 可变在这种情况下合适吗?

c++ - 通过代理服务器提升 asio 套接字连接

vba - 查找并删除单元格值为 "#N/A"的行

linux - "find"和 "ls"与 GNU 并行

c++ - Visual Studio : Global namespace takes precedence over local

c - 为什么 RAND_MAX 在 linux 和 windows 的同一台机器上不同?

linux - find 命令中的 Unix 大括号扩展