Suppose I have a sorted vector without duplicated values. If I want to go through all the triples of different values, I do this:
for(std::size_t i = 0; i < data.size(); ++i)
for(std::size_t j = i+1; j < data.size(); ++j)
for(std::size_t k = j+1; k < data.size(); ++k)
do_somthing_with(data[i],data[j],data[k]);
How can I do that with iterators if my container is a std::set
?
Note: I don't use C++11 for compatibility reasons.
You can do pretty much the same as with the vector, but you'll need to create a wrapper function, that will copy and increment set iterator:
std::set<int>::const_iterator next_iterator(std::set<int>::const_iterator it)
{
return ++it; // it has been passed by value, so already copied
}
//...
for (std::set<int>::const_iterator it = data.begin(); it != data.end(); ++it)
for(std::set<int>::const_iterator jt = next_iterator(it); jt != data.end(); ++jt)
for(std::set<int>::const_iterator kt = next_iterator(jt); kt != data.end(); ++kt)
// ...