Skip to content

Latest commit

 

History

History
54 lines (48 loc) · 1.48 KB

README.md

File metadata and controls

54 lines (48 loc) · 1.48 KB

Product Iterator

This reposity is forked from here

C++ iterator that performs the cartesian product of many containers. Requires C++11 and boost.

I have let the test of this reposity be easier than before. You just do some operations following:
$ chmod +x cmp.sh
$ ./cmp.sh
$ ./product_iterator_test.exe

And you will get the result like this:

a contains: 1 and 3 and 5
a contains: 1 and 3 and 6
a contains: 1 and 3 and 7
a contains: 1 and 3 and 8
a contains: 1 and 4 and 5
a contains: 1 and 4 and 6
a contains: 1 and 4 and 7
a contains: 1 and 4 and 8
a contains: 2 and 3 and 5
a contains: 2 and 3 and 6
a contains: 2 and 3 and 7
a contains: 2 and 3 and 8
a contains: 2 and 4 and 5
a contains: 2 and 4 and 6
a contains: 2 and 4 and 7
a contains: 2 and 4 and 8

It's really easy to use Product Iterator API as following codes:

vector<int> c1({1,2});
vector<int> c2({3,4});
vector<int> c3({5,6,7,8});
auto it = make_product_iterator(c1, c2, c3);
auto end = it.get_end();
for (; it != end; ++it) {
    // Provides a std::tuple<int,char> with the values from the constructor
    *it;
    // Access to a single element of the tuple is optimized and the following
    // comparison always holds
    // it.get<0>() == std::get<0>(*it);
    std::cout << "a contains: " << std::get<0>(*it);
    std::cout << " and " << std::get<1>(*it);
    std::cout << " and " << std::get<2>(*it) << '\n';  
}

Enjoy your coding!