title: Iterating over a range of ranges
body: <p>If I have a range of ranges, is there a way to join them together and iterate over them as if they were a single range?</p>
  
  <p>By range, I mean any kind of container or iterator pair. Basically like boost's <a href="http://www.boost.org/doc/libs/1_52_0/libs/range/doc/html/range/reference/overview.html" rel="nofollow">ranges</a>. Boost already have a function for joining two ranges together with boost::join, but that function can't join an arbitary number of ranges.</p>
  
  <p>Basically, I'm looking for a way to do what the the <code>many</code> function does in this piece of code:</p>
  
  <pre><code>std::vector&lt;std::vector&lt;int&gt;&gt; n = {{0, 1}, {2, 3}};
  for (auto i : many(n))
      std::cout &lt;&lt; i &lt;&lt; '\n';
  </code></pre>
  
  <p>Which would output 0, 1, 2, 3.</p>
  
  <p>In C#, I had <code>SelectMany</code> which could do this.</p>