經過一番痛苦我設法破解一起提升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