4
This site聲稱set_union
等同於下面的代碼:什麼是正確的std :: 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);
}
}
但是,這似乎有些奇怪:不就是崩潰(或導致其他未定義的行爲)如果範圍之一是空的?這兩個if
子句是不是應該在while
循環的開頭,而不是結尾?
cplusplus.com不是權威的參考。 ISO/IEC 14882是,並且不包含`set_union`的示例代碼,只是規範(允許輸入序列爲空)。 – 2010-11-30 20:53:27