# Iterate over distinct pairs of a growing list

Given a single list of `n` items `(x1,x2,x3,...,xn)`, it is easy to iterate over all unique pairs in the list, i.e. `(x1,x2), (x1,x3), ..., (x1,xn), (x2,x3), (x2,x4), ... ,(x2,xn),...,(x[n-1],xn)`. As a practical example, this could be an STL vector `x`, and iterate

``````for (auto i=0; i<n; i++) {
for (auto j=i+1, j<n; j++) {
// Do something with x[i],x[j]
}
}
``````

My problem: what if the `Do something` part could grow the vector `x`, by adding one or even several elements. For example, after evaluating the loop for `(x1,x2)` the new length could be `n+1` with a new element `x[n+1]`. Now I also want to, in the same loop, consider at some point the pairs `(x1,x[n+1]),(x2,x[n+1]),...,(xn,x[n+1])`. Is this possible, and if so, how?

I think two other pieces are: the order of evaluation doesn't matter (i.e. it doesn't matter when I get to consider pairs of `x[n+1]`) and it doesn't matter the order of the pairs `(x[n+1],x1)` or `(x1,x[n+1])`.

Thanks!