std::list::size()는 정말 O(n)인가요?
std의 시간 복잡도에 대한 우려가 제기되었습니다. ::list::size() C . 일부에서는 표준이 복잡성을 지정하지 않음에도 불구하고 구현에 따라 달라질 수 있다고 제안합니다.
구현별 동작
이전 버전의 C에서 std의 복잡성은 다음과 같습니다. :list::size()는 사용된 STL 구현에 따라 다릅니다. Microsoft Visual Studio V6는 이를 일정한 복잡성으로 구현한 반면, GCC 최대 4.1.0은 거리 기반 접근 방식을 사용하여 O(n) 복잡성을 가져왔습니다.
표준화 및 복잡성
C 11에서는 n2923에 변경 사항이 도입되어 모든 표준 컨테이너 .size() 작업에 일정한 시간 복잡도(O(1))가 필요합니다. 이는 이제 구현 전반에 걸쳐 일관된 성능을 보장하는 명시적인 요구 사항입니다.
GCC 구현
그러나 표준화에도 불구하고 std::list::size( ) GCC 버전 4.8까지는 O(n) 알고리즘을 계속 사용합니다. 이에 대한 자세한 내용은 원래 질문에 링크된 블로그 항목에 설명되어 있습니다.
GCC 5.0 업데이트
이 문제는 GCC 5.0에서 해결되었으며 나중에. C 11 모드에서 std::list::size()는 GCC 5.0 이상에서 O(1) 복잡도로 올바르게 구현됩니다.
libc 구현
In GCC의 접근 방식과 달리 libc의 std::list::size() 구현은 처음부터 O(1) 복잡성에 대해 지속적으로 최적화되었습니다.
위 내용은 std::list::size() 는 실제로 C에서 O(1)입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!