C++ 如何在C样式数组上使用find_if和reverse_迭代器?
要使用POD元素搜索C数组中第一个出现的元素,可以使用C++ 如何在C样式数组上使用find_if和reverse_迭代器?,c++,arrays,iterator,reverse-iterator,C++,Arrays,Iterator,Reverse Iterator,要使用POD元素搜索C数组中第一个出现的元素,可以使用std::find_if(begin,end,findit)轻松完成。但我需要最后一次机会。给我的想法是,这可以通过std::reverse\u迭代器来完成。因此,我尝试: std::find_if(std::reverse_iterator<podtype*>(end), std::reverse_iterator<podtype*>(begin), findit)
std::find_if(begin,end,findit)
轻松完成。但我需要最后一次机会。给我的想法是,这可以通过std::reverse\u迭代器来完成。因此,我尝试:
std::find_if(std::reverse_iterator<podtype*>(end),
std::reverse_iterator<podtype*>(begin),
findit);
std::find_if(std::reverse_迭代器(end),
标准::反向迭代器(开始),
findit);
这给了我一个错误:
无法将赋值中的“std::reverse_迭代器”转换为“xyz*”
你有办法这样做吗?或者你知道更好的解决办法吗
代码如下:
#包括
#包括
#如果
函数的返回类型等于作为参数传入的迭代器类型,则包含std::find_。在本例中,由于您将std::reverse_iterator
s作为参数传递,因此返回类型将是std::reverse_iterator
。这意味着
found = std::find_if(std::reverse_iterator<xyz*>(end),
std::reverse_iterator<xyz*>(begin),
findit);
这将修复编译器错误。但是,我认为这一行中存在两个次要错误:
if (found != std::reverse_iterator<xyz*>(end));
因为如果未找到元素,find\u if
将返回std::reverse\u迭代器(begin)
希望这有帮助 是的,这很有用,谢谢。现在返回的索引在这两种情况下都是1,这似乎是正确的,但如果反向查找的结果将给出2的索引,那就太好了。我不能从rfound
中减去begin
,因为这会导致与以前相同的错误。@ChristianAmmer-我认为这是因为您获取索引的逻辑是错误的。减法计算从反向迭代器到数组最后一个元素的距离,它给出了从数组后面到前面的距离,我想我现在知道了。逻辑错误,但是使用(end-begin)-(rfound-std::reverse_iterator(end))-1
我得到了正确的索引。
if (found != std::reverse_iterator<xyz*>(end));
if (rfound != std::reverse_iterator<xyz*>(begin))