Czy std :: list :: size ma stałą złożoność w C ++ 11?
ja używamgcc 4.8.1 i po godzinach debugowania strasznego tajemniczego problemu z wydajnością dowiedziałem się, żestd::list::size
jest faktycznie realizowane jako wezwanie dostd::distance
.
/** Returns the number of elements in the %list. */
size_type
size() const _GLIBCXX_NOEXCEPT
{ return std::distance(begin(), end()); }
Zaskoczyło mnie to, ponieważ odnośnik mówi, żezłożoność std :: list :: size powinna być stała i złożonośćstd::distance
jest liniowy dlastd::list::iterator
.
Jestem naprawdę zdezorientowany, ponieważ myślę, że gcc ma doskonałe wsparcie dla funkcji C ++ 11 i nie widzę powodu, dla którego nie mieliby go implementować.
Czy to błąd w odwołaniu lub w gcc?
W tym drugim przypadku:
Czy jest jakiś powód, dla którego tak fundamentalna funkcja C ++ 11 byłaby tak długa?
Czy istnieje trzecia możliwość, np .:
Czy mogę mieć gcc 4.8.1, ale niektórestarsza wersja standardowej biblioteki?