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