gpt4 book ai didi

c++ - 测试一个值是否在 vector 中

转载 作者:行者123 更新时间:2023-11-30 00:49:01 24 4
gpt4 key购买 nike

我有一个类板,有一个 operator== , 和一个类 Graph , 包含 Board* (我们称之为选项卡)和一个 vector<Graph*> ( child )。

我有 2 vector<Graph*> , 命名为打开和关闭。

我如何查看打开元素中的每个子元素,如果该子元素尚未处于关闭状态,我如何将其添加到打开元素中?

这是我的尝试,但无法编译。

for (vector<Graph*>::iterator itr = opened[0]->getchildren().begin(); itr != opened[0]->getchildren().end(); ++itr) {

// this doesn't compile
vector<Graph*>::iterator it = find(closed.begin(), closed.end(), *itr);

if(it != closed.end())
{
opened.push_back(*it);
}
}

我得到:

no matching function for call to 'find(std::vector<Graph*>::iterator, std::vector<Graph*>::iterator, Graph*&)'

我真的不明白std::find作品。但我对每一种方法都持开放态度。

最佳答案

std::find返回一个迭代器,而不是指向迭代器的指针:

vector<Graph*>::iterator* it = NULL;

// that line doesn't compile
it = find(closed.begin(), closed.end(), (*itr)->tab);

你的是一个指针。您只需要实际的迭代器类型:

vector<Graph*>::iterator it = find(...);

您检查有效性不是通过与 NULL 进行比较,而是通过与您传入的结束迭代器进行比较:

if (it != closed.end())
{
...
}

鉴于您刚刚提供的错误,问题在于 find() 正在使用 operator== 查找特定值。您正在寻找 Graph* vector 中的 Board*。这两者不可比 - 您只能查找 Graph*。除非您正在寻找一个 Graph* contains 一个 Board*,在这种情况下您会希望通过 提供您自己的谓词std::find_if

关于c++ - 测试一个值是否在 vector 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29972106/

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