このサイトset_union
は、次のコードと同等であると主張しています。
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_union ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result )
{
while (true)
{
if (*first1<*first2) *result++ = *first1++;
else if (*first2<*first1) *result++ = *first2++;
else { *result++ = *first1++; first2++; }
if (first1==last1) return copy(first2,last2,result);
if (first2==last2) return copy(first1,last1,result);
}
}
しかし、それは奇妙に思えます: 範囲の 1 つが空の場合、クラッシュ (または他の未定義の動作が発生) しませんか? 2 つのif
句は、while
ループの最後ではなく最初に置くべきではありませんか?