gpt4 book ai didi

c++ - 什么是正确的 std::set_union 代码?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:57:44 24 4
gpt4 key购买 nike

This site声称 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 循环的开头,而不是结尾吗?

最佳答案

我同意它看起来完全坏了。为了进行比较,这里是 STLport 代码:

template <class _InputIter1, class _InputIter2, class _OutputIter,          class _Compare>_OutputIter __set_union(_InputIter1 __first1, _InputIter1 __last1,                        _InputIter2 __first2, _InputIter2 __last2,                        _OutputIter __result, _Compare __comp) {  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1))  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first2, __last2))  while (__first1 != __last1 && __first2 != __last2) {    if (__comp(*__first1, *__first2)) {      _STLP_VERBOSE_ASSERT(!__comp(*__first2, *__first1), _StlMsg_INVALID_STRICT_WEAK_PREDICATE)      *__result = *__first1;      ++__first1;    }    else if (__comp(*__first2, *__first1)) {      _STLP_VERBOSE_ASSERT(!__comp(*__first1, *__first2), _StlMsg_INVALID_STRICT_WEAK_PREDICATE)      *__result = *__first2;      ++__first2;    }    else {      *__result = *__first1;      ++__first1;      ++__first2;    }    ++__result;  }  return _STLP_STD::copy(__first2, __last2, _STLP_STD::copy(__first1, __last1, __result));}

关于c++ - 什么是正确的 std::set_union 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4318319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com