template void generatePermutations(std::vector &items, std::vector > *permutations) { std::vector > lastGen; std::vector::iterator> lastRems; for (typename std::vector::iterator ii = items.begin(); ii != items.end(); ++ii ) { Item *i = *ii; std::vector itemList; itemList.push_back(i); lastGen.push_back(itemList); lastRems.push_back(ii+1); } permutations->insert(permutations->end(), lastGen.begin(), lastGen.end()); for (unsigned int i = 2; i <= items.size(); ++i) { std::vector > gen; std::vector::iterator> rems; typename std::vector >::iterator gi; typename std::vector::iterator>::iterator ri; for (gi = lastGen.begin(), ri = lastRems.begin(); gi != lastGen.end(); ++gi, ++ri) { for (typename std::vector::iterator ii = *ri; ii != items.end(); ++ii) { std::vector perm = *gi; perm.push_back(*ii); gen.push_back(perm); rems.push_back(ii+1); } } permutations->insert(permutations->end(), gen.begin(), gen.end()); lastGen.swap(gen); lastRems.swap(rems); } }