C++ 참조 웹 사이트 http://www.cplusplus.com/reference/vector/vector/swap/ std :: vector의 스왑 기능의 복잡성은 일정하다고합니다. 그것은 벡터의 내용에 대한 참조를 변경하여 보관할 수 있습니다 같아요, 그러나 하나의 표준 : : 벡터 개체가 스택에 있고 다른 하나는 힙에, 그것의 내용에 대한 참조를 변경하여 보관할 수 없습니다 벡터. 그래서, 벡터의 스왑 함수의 복잡성은 항상 O (1)입니다. 하나의 std :: vector 객체가 스택에 있고 다른 하나가 힙에있을 때 어떻게 보관합니까?하나의 std :: vector 객체가 스택에 있고 다른 하나가 힙에있을 때 벡터의 스왑 함수의 시간 복잡도는 O (1) 또는 O (n)입니까?
0
A
답변
2
벡터의 실제 내용은 거의 항상 힙에 있습니다.
1
기준도 말한다 :
동일 유형의 다른 벡터 용기 (즉, 같은 템플릿 파라미터 T와 ALLOC 인스턴스화), 그 내용이이 컨테이너 과 교환된다.
두 벡터에 대한 할당자가 동일해야합니다. 이는 실제 데이터가 기본적으로 힙에 같은 위치에 할당된다는 것을 의미합니다.
당신은 (일반적으로 더 정확하다) cpprefence documentation으로 보면, 그것은 말한다 :
만약 표준 : allocator_traits :: propagate_on_container_swap :: 값 이 참, 다음 할당 자는을 사용하여 교환 비회원 스왑에 무응답 전화. 그렇지 않으면, 그들은 교환되지 않습니다. 그리고 만약 get_allocator()! = other.get_allocator(), 동작은 정의되지 않습니다).
그래서 서로 다른 할당자를 사용하여 벡터를 스왑 할 수 있습니다 (스왑 가능하다면). 어쨌든 스왑은 데이터가 벡터 객체 자체에 저장되지 않고 메모리가 할당 자에 의해 생성되고 관리되기 때문에 상수 연산이됩니다.
관련 문제
- 1. 이 함수의 시간 복잡도는 O (1)입니까?
- 2. 시간 복잡도는 + n은 O (L)
- 3. O (n)과 O (kn)의 시간 복잡도는 어떻게 같습니까?
- 4. 큰 O - O (N^2) 또는 O (N^2 + 1)?
- 5. 큰 O 시간 복잡성
- 6. 이 함수의 시간 복잡도는 얼마나됩니까?
- 7. 실제로 연결된 목록 추가 O (N) 또는 O (1)입니까?
- 8. O (n) 시간 대괄호 패턴이있는 O (1) 부분 문자열 검색
- 9. Boost 풀 무료 효율성 O (n) 또는 O (1)
- 10. memmove() O (n) 또는 O (1)을 고려해야합니까?
- 11. 배열 액세스 복잡성은 perl에서 O (1) 또는 O (n)입니까?
- 12. 이 코드에서 boost :: property_map 연산자 [] O (1) 시간 복잡성이 있습니까?
- 13. 시간 복잡도 O (N) 또는 O (Log N)입니까?
- 14. 배열 삽입의 시간 복잡도가 O (n)이고 O (n + 1)이 아닌 이유는 무엇입니까?
- 15. 함수의 파일 I/O?
- 16. C (++)에서 O (1) 조회
- 17. 다음 pseudocode의 big-O 복잡도는 무엇입니까?
- 18. 순차 검색은 o (n^2) 시간이 걸립니다. O (1) 또는 O (log n)이 되길 원합니다.
- 19. Haxe의 array.push() O (1)입니까?
- 20. Big-O 표기법에서 다음 방법의 시간 복잡도는 어떻게됩니까?
- 21. 클로저 subvec O (1) 대신 O (n)?
- 22. 역 전파에서 왜 필요합니까? o (1 - o)
- 23. 모든 n, O (1)이 O (n)보다 빠를 때 O (1)에 대해 O (n) 선택?
- 24. O (1) 주말
- 25. O (1) 시간 걸리는 알고리즘이 있습니까?
- 26. 재귀 함수의 Big O 계산
- 27. 다음 코드의 Big O 복잡도는 얼마나됩니까?
- 28. O (1) 시간 내에 검색 할 수 있습니까?
- 29. LinkedList.Clear() O (1)
- 30. 이 함수의 시간 복잡도는 어떻게 계산합니까?