>백엔드 개발 >C++ >std::list::size() 는 실제로 C에서 O(1)입니까?

std::list::size() 는 실제로 C에서 O(1)입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-16 15:00:04423검색

Is std::list::size() Really O(1) in C  ?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.