myVector是向量节点。每个节点都有一个int值和一个字符串指针名称。我正在尝试制作一个简单的函数,该函数将确定此向量中的任何节点是否具有此名称。
""
运行此命令时,出现错误“在“ struct std :: iterator_traits”中没有名为“ iterator_category”的类型”。我猜想这与指针的设置有关,但是我不确定这将是什么或该错误意味着什么。有人可以向我解释吗?
答案 0 :(得分:2)
您正在使用算法,并且begin()
/ end()
成员函数不正确。首先,
*myVector.end()
已经是未定义的行为,因为所有容器end()
函数都返回一个过去时,即不可取消引用的迭代器。取消引用它会导致UB。
第二,std::find
呼叫应为
const auto it = std::find_if(myVector.cbegin(), myVector.cend(),
[&found](const Node *n){ return n->name() == found; });
您需要指定一个自定义谓词-这里是一个lambda表达式-因为find
算法只能遍历节点,而不能遍历节点的名称,因此,您必须通过调用{ {1}}并将其与Node::name()
进行比较。
让我添加一些其他说明:
found
而不是std::find_if
算法。std::find
和cbegin()
函数。cend()
)被广泛接受并简化了其使用。auto
可以是it
,而firstMatchingNode
例如found
。std::any_of
。这更接近您的意图,因为它丢弃了比赛的位置。