4
set_union
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);
}
}
그러나 이상하게 보입니다. 범위 중 하나가 비어 있으면 충돌이 발생하지 않거나 다른 정의되지 않은 동작이 발생하지 않습니까? 2 개의 if
절이 while
루프의 시작 부분에 있지 않아야합니까?
cplusplus.com은 신뢰할 수있는 참조가 아닙니다. ISO/IEC 14882는'set_union'을위한 샘플 코드를 포함하지 않으며, 단지 입력 시퀀스를 비울 수있는 명세이다. –
실제로 저는 cplusplus.com을 좋아하지 않았습니다. 세부 사항에는 정확하지 않습니다. – ybungalobill
@ybungalobill : 인덱스처럼 좋네요 :) –