Heim > Backend-Entwicklung > C++ > Hauptteil

Ist `std::list::size()` wirklich O(1) in modernen C-Implementierungen?

Linda Hamilton
Freigeben: 2024-11-16 10:57:03
Original
922 Leute haben es durchsucht

Is `std::list::size()` Truly O(1) in Modern C   Implementations?

Ist std::list::size() wirklich O(n) in modernen Implementierungen?

Kürzlich haben einige Entwickler dies vorgeschlagen std::list::size() hat eine lineare Zeitkomplexität (O(n)). Gemäß dem C-Standard ist die Komplexität jedoch nicht definiert und kann je nach Implementierung variieren.

In früheren Versionen des C-Standards (C 03) wurde empfohlen, dass die Operation size() eine konstante Komplexität aufweist (O(1)). Mit der Einführung von C 11 wurde es jedoch zur Pflicht für alle Standardbehälter. In Tabelle 96 des C 11-Standards heißt es ausdrücklich, dass .size() für alle Container eine konstante Komplexität haben sollte.

In der Vergangenheit implementierte die libstdc-Bibliothek von GCC size() mit der Komplexität O(n) unter Verwendung von std::distance(begin (), end()), wie in dem von Ihnen zitierten Blogeintrag beschrieben. Im C 11-Modus hat sich dieses Verhalten jedoch geändert:

size_type
size() const _GLIBCXX_NOEXCEPT
{ return __size_alloc_.first(); }

_LIBCPP_INLINE_VISIBILITY
const size_type& __sz() const _NOEXCEPT
    {return __size_alloc_.first();}
Nach dem Login kopieren

In GCC 5.0 und höher verwendet die Funktion size() eine interne Datenstruktur, um die Anzahl der Elemente zu verfolgen und so den Vorgang effektiv durchzuführen O(1). Dies steht im Einklang mit der C 11-Anforderung für alle Standardcontainer.

Es ist wichtig zu beachten, dass einige Nischenanwendungsfälle immer noch zu O(n)-Komplexität für size() führen können, für die überwiegende Mehrheit der Benutzer jedoch Der Betrieb sollte eine konstante Zeit sein.

Das obige ist der detaillierte Inhalt vonIst `std::list::size()` wirklich O(1) in modernen C-Implementierungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage