イテレータを結合したい

考えている問題は

Range AとBから、AとBを結合した1つのRange Cを合成したい。

疑似コードで書くと

Range A = (1..3);
Range B = (6..9);
Range C = connect(A, B);
foreach(C, print);  // 1, 2, 3, 6, 7, 8, 9 と出力

みたいな事をしたい。
A.end()と等しいかどうかを毎回判定するやり方より効率良く出来ないかな???

関係ないけど、C++でyieldが使えたらな〜。