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?

questionAnswers(1)

yourAnswerToTheQuestion