2012-09-06 2 views
7

스와핑과 관련하여 세 가지 질문이 있습니다.스왑의 성능에 관한 질문

(1)이 개 동일한 유형의 STL 컨테이너 ab에 관해서는, 두 작업은 아래 내가 두 번째 컨테이너 (대한 전문 이해

swap(a,b); 
a.swap(b); 

일 것으로는 예를 들면, 단지 반복자의 숫자를 포함 스왑) 반면에 첫 번째는 범용 데이터 유형을 사용하고 내부 복사본 생성을 수행하는 전역 알고리즘입니다.

제 질문은 컴파일러가 두 번째 관계없이 사용합니까 아니면 적절한 전문화가 존재하는지 확인하는 데주의해야합니까?

(2) swap(a,b)swap(b,a)과 동일한 성능을 보입니까? 복사 구성이 관련되어 있고 오브젝트의 크기가 상당히 다른 경우 문제가 될 수 있습니다.

(3) 오버로드 된 연산자 ==이 있고 비교적 빠르면 스와핑 전에 a == b을 확인하면 불필요한 작업을 피할 수 있습니다. std::swap이 체크를 먼저 적용합니까, 아니면 관계없이 작업을 수행합니까?

시간 내 주셔서 감사합니다.

답변

7
  1. 글로벌 swap 템플릿 swap을 지원하는 표준 라이브러리 유형 각각에 대한 전문; 전문화는 회원 swap에게 전화합니다.

  2. swap(a, b)swap(b, a) 사이에 차이가 없어야합니다. (나는 그것이 문제가 될 수있는 비뚤어진 유형을 상상할 수 있지만 실제로는 결코 일어나지 않을 것이다).

  3. 아니요, std::swap은 일반적으로 동등성을 확인하지 않습니다. 많은 경우 스왑을 수행하는 것보다 속도가 느릴 수 있습니다.

+0

이 모든 것이 STL의 특정 구현에 의존하지 않습니까? 나는 당신이 표준에서 이것의 어떤 것도 도출 할 수 있다고 생각하지 않는다. –

+1

숫자 3은 구현에 따라 다를 수 있습니다. 1이 명시 적으로 필요합니다. –

+0

신속한 응답에 진심으로 감사드립니다. – Chrys