2016-10-21 1 views
0

C++ 참조 웹 사이트 http://www.cplusplus.com/reference/vector/vector/swap/ std :: vector의 스왑 기능의 복잡성은 일정하다고합니다. 그것은 벡터의 내용에 대한 참조를 변경하여 보관할 수 있습니다 같아요, 그러나 하나의 표준 : : 벡터 개체가 스택에 있고 다른 하나는 힙에, 그것의 내용에 대한 참조를 변경하여 보관할 수 없습니다 벡터. 그래서, 벡터의 스왑 함수의 복잡성은 항상 O (1)입니다. 하나의 std :: vector 객체가 스택에 있고 다른 하나가 힙에있을 때 어떻게 보관합니까?하나의 std :: vector 객체가 스택에 있고 다른 하나가 힙에있을 때 벡터의 스왑 함수의 시간 복잡도는 O (1) 또는 O (n)입니까?

답변

2

벡터의 실제 내용은 거의 항상 힙에 있습니다.

1

기준도 말한다 :

동일 유형의 다른 벡터 용기 (즉, 같은 템플릿 파라미터 T와 ALLOC 인스턴스화), 그 내용이이 컨테이너 과 교환된다.

두 벡터에 대한 할당자가 동일해야합니다. 이는 실제 데이터가 기본적으로 힙에 같은 위치에 할당된다는 것을 의미합니다.

당신은 (일반적으로 더 정확하다) cpprefence documentation으로 보면, 그것은 말한다 :

만약 표준 : allocator_traits :: propagate_on_container_swap :: 값 이 참, 다음 할당 자는을 사용하여 교환 비회원 스왑에 무응답 전화. 그렇지 않으면, 그들은 교환되지 않습니다. 그리고 만약 get_allocator()! = other.get_allocator(), 동작은 정의되지 않습니다).

그래서 서로 다른 할당자를 사용하여 벡터를 스왑 할 수 있습니다 (스왑 가능하다면). 어쨌든 스왑은 데이터가 벡터 객체 자체에 저장되지 않고 메모리가 할당 자에 의해 생성되고 관리되기 때문에 상수 연산이됩니다.

관련 문제