#include #include #include #include #include #include #include /* implement selection_iterator and selection */ int main() { // two of the same container type with same size { std::vector a { 1, 3, 4 }; std::vector b { 0, 2, 5 }; std::vector result { 0, 1, 2, 3, 4, 5 }; auto begin = selection(a.begin(), a.end(), b.begin(), b.end()); auto end = selection(a .end(), a.end(), b .end(), b.end()); for (auto const& value : result) { assert(begin != end); assert(*begin++ == value); } } // two different container types with same size { std::list a { 0.5, 1.0, 2.5 }; std::vector b { 1.5, 1.75, 2.25 }; std::vector result { 0.5, 1.0, 1.5, 1.75, 2.25, 2.5 }; auto begin = selection(a.begin(), a.end(), b.begin(), b.end()); auto end = selection(a .end(), a.end(), b .end(), b.end()); for (auto const& value : result) { assert(begin != end); assert(*begin++ == value); } } // two different containers, with one empty { std::list a { "a", "b", "c" }; std::set b { }; std::vector result { "a", "b", "c" }; auto begin = selection(a.begin(), a.end(), b.begin(), b.end()); auto end = selection(a .end(), a.end(), b .end(), b.end()); for (auto const& value : result) { assert(begin != end); assert(*begin++ == value); } } }