Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 正确的std::set_联合代码是什么?_C++_Algorithm_Stl_Set Union - Fatal编程技术网

C++ 正确的std::set_联合代码是什么?

C++ 正确的std::set_联合代码是什么?,c++,algorithm,stl,set-union,C++,Algorithm,Stl,Set Union,声称set\u union等同于以下代码: template <class InputIterator1, class InputIterator2, class OutputIterator> OutputIterator set_union ( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2

声称
set\u 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);
  }
}
模板
输出迭代器集合\u并集(先输入迭代器1,后输入迭代器1,
输入计数器2优先2,输入计数器2最后2,
输出计数器结果)
{
while(true)
{

如果(*first1我同意它看起来完全坏了。为了比较,这里是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)); } 模板 _输出程序集并集(\u输入程序1\u第一个1,\u输入程序1\u最后一个1, _先输入2,后输入2, _输出器(结果、比较、比较){ _STLP调试检查(STLP PRIV检查范围(uuu first1,uu last1)) _STLP调试检查(STLP PRIV检查范围(uuu first2,uu last2)) 而(\uuuu first1!=\uuu last1&&uuu first2!=\uu last2){ 如果(uuu comp(*uuu first1,*uuu first2)){ _STLP\u VERBOSE\u ASSERT(!\u comp(*\u first2,*\u first1),\u StlMsg\u无效\u严格\u弱\u谓词) *__结果=*\uuu first1; ++__第一个1; } 否则如果(uuu comp(*uuu first2,*uuu first1)){ _STLP\u VERBOSE\u ASSERT(!\u comp(*\u first1,*\u first2),\u StlMsg\u无效\u严格\u弱\u谓词) *__结果=*uu first2; ++__前2名; } 否则{ *__结果=*\uuu first1; ++__第一个1; ++__前2名; } ++__结果; } 返回u STLP STD::copy(u first2,u last2,u STLP STD::copy(u first1,u last1,u结果)); }
cplusplus.com不是一个权威参考。ISO/IEC 14882是,它不包含
set\u union
的示例代码,只是规范(允许输入序列为空)。事实上,我从来都不喜欢cplusplus.com,它的细节不精确。@ybungalobill:我喜欢它作为索引:)我建议。