std::vector
및 std::list
에 대해 테스트 한 코드의 성능에 대해 혼동스러워합니다. find_if
과 max_element
에이 두 가지의 차이점이 있습니까?std :: vector 및 std :: list find_if 및 max_element 성능
1
A
답변
7
big-O 표기법의 경우 O (n)과 동일한 성능을 나타냅니다. (find_if
은 요소가 더 빨리 발견되면 더 적을 수 있지만 두 컨테이너 모두 똑같이 적용됩니다.)
실제 벽 시계 시간의 관점에서 볼 때 벡터는 캐시 일관성 때문에 더 잘 수행됩니다. 모든 벡터 요소는 메모리에서 순차적이므로 액세스하면 CPU 캐시를보다 효율적으로 사용할 수 있습니다. 연결된 목록의 요소는 메모리에 흩어져있을 수 있으며 목록 링크를 따라 가야합니다.
4
두 알고리즘 모두 계산 복잡성 측면에서 O (n)이지만 벡터는 인접한 저장소 영역에 요소를 할당하므로 캐시 적중률이 높아질 가능성이 높습니다. 반면에리스트를 순회하는 것은 캐쉬 미스의 비율이 높아지는 경향이있는 흩어져있는 메모리 액세스 패턴을 포함합니다.
언제나 성과와 관련하여 결정을 내리기 전에 측정을 수행하십시오.
0
max_element의 경우 list 및 array의 모든 요소가 순회됩니다. 따라서 성능면에서 모두 O (n)입니다.
다시 find_if의 경우, 두 탐색 구조에 대해 순회가 선형 (O (n))이됩니다.
각기 다른 상수와의 차이가별로 없다고 생각하지 않습니다.
관련 문제
- 1. std :: vector 및 std :: list 메모리 레이아웃
- 2. boost :: variant 및 std :: find_if
- 3. std :: list vs std :: vector iteration
- 4. std :: vector, std :: map 및 메모리 문제
- 5. std :: for_each 및 std :: vector 소멸자 호출
- 6. std :: vector 및 winapi windows
- 7. std :: std :: string과 std :: vector 사이의 이동
- 8. std :: list와 std :: vector 중 하나를 선택하십시오.
- 9. std :: vector 및 std :: string을 사용하여 포인터 및 참조와 관련된 특정 문제가 있습니다. std :: vector, std :: string
- 10. std :: vector vs std :: insert
- 11. std :: vector after std :: bad_alloc
- 12. 컨테이너 데이터 구조는 std :: vector 및 std :: list와 유사합니다.
- 13. std :: vector 및 std :: set 속성을 가진 컨테이너?
- 14. std :: vector 및 std :: deque의 요소의 연속 저장 위치가
- 15. std :: max_element on complex elements (연산자 = 문제)
- 16. std :: vector emplace_back 대 std :: deque push_back?
- 17. std :: vector 문제
- 18. std :: list or std :: multimap
- 19. std :: vector 요소 옮기기 및 복사
- 20. std :: vector 및 memory release 사용
- 21. C++ : std :: vector 및 input interator
- 22. 이상한 std :: vector :: reverse_iterator 및 문자열 동작
- 23. std :: vector 데이터 저장 및 복원
- 24. std :: vector & std :: array를 삭제할 수 없습니까?
- 25. std :: list 및 std :: map에 대한 일반적인 알고리즘?
- 26. std :: vector optimization required
- 27. C++ std :: vector problems
- 28. Igraph에서 std :: vector 사용
- 29. std :: unordered_set와 std :: vector 사이의 다형성?
- 30. std :: vector <std :: reference_wrapper >
[Bjarne Stroustrup : C++ 11 스타일] (http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Keynote-Bjarne-Stroustrup-Cpp11-Style) - 슬라이드 43에서 가져옵니다. – Naszta