#include #include //F = transformation function, P = predicate, C = container template struct Comprehension { private: typedef boost::filter_iterator FilterIter; public: typedef boost::transform_iterator ComprehensionIterator; Comprehension(const F& function, const P& predicate, const C& container): mContainer(container), mBegin(FilterIter(predicate, mContainer.begin(), mContainer.end()), function), mEnd(FilterIter(predicate, mContainer.end(), mContainer.end()), function) { } inline ComprehensionIterator begin(void){return mBegin;} inline ComprehensionIterator end(void){return mEnd;} private: C mContainer; ComprehensionIterator mBegin,mEnd; };