经过一番痛苦我设法破解一起提升filter_iterator为什么boost filter_iterator有怪异的make_filter_iterator函数?
using namespace std;
std::function<bool(uint32_t)> stlfunc= [](uint32_t n){return n%3==0;};
int main()
{
vector<uint32_t> numbers{11,22,33,44,55,66,77,3,6,9};
auto start = boost::make_filter_iterator(stlfunc, numbers.begin(), numbers.end());
auto end = boost::make_filter_iterator(stlfunc, numbers.end() , numbers.end());
auto elem = std::max_element(start,end);
cout << *elem;
}
它的工作不错,但我不知道为什么make_filter_iterator需要numbers.end()
的这个小例子? 我可能是错用这种方式,我guestimated它从C数组例如:
http://www.boost.org/doc/libs/1_53_0/libs/iterator/example/filter_iterator_example.cpp
它也解释说,它是可选的,如果基础迭代器是默认构造的(并且代表你想要的范围的末尾) – 2013-03-20 20:44:15
即时混淆...正常迭代器不知道何时停止,那为什么要filter_iterator呢?我的意思是你不做(auto it = v.begin; it!= std :: vector :: iterator(); ++ it) –
NoSenseEtAl
2013-03-20 20:47:58
@NoSenseEtAl是不是UB增加一个'end'迭代器? – 2013-03-20 20:48:47