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:我喜欢它作为索引:)我建议。