要使用 POD 元素搜索 C 数组中第一次出现的元素,可以使用std::find_if(begin, end, findit)
. 但我需要最后一次出现。这个答案让我想到可以用std::reverse_iterator
. 因此我尝试了:
std::find_if(std::reverse_iterator<podtype*>(end),
std::reverse_iterator<podtype*>(begin),
findit);
这给了我错误:
无法在赋值中将 'std::reverse_iterator< xyz* >' 转换为 'xyz*'
您是否知道如何以这种方式进行操作,或者您知道更好的解决方案?
这是代码:
#include <iostream>
#include <iterator>
#include <algorithm>
struct xyz {
int a;
int b;
};
bool findit(const xyz& a) {
return (a.a == 2 && a.b == 3);
}
int main() {
xyz begin[] = { {1, 2}, {2, 3}, {2, 3}, {3, 5} };
xyz* end = begin + 4;
// Forward find
xyz* found = std::find_if(begin, end, findit);
if (found != end)
std::cout << "Found at position "
<< found - begin
<< std::endl;
// Reverse find
found = std::find_if(std::reverse_iterator<xyz*>(end),
std::reverse_iterator<xyz*>(begin),
findit);
if (found != std::reverse_iterator<xyz*>(end));
std::cout << "Found at position "
<< found - std::reverse_iterator<xyz*>(end)
<< std::endl;
return 0;
}
以及codepad.org 上的编译器错误