Может меняться в зависимости от версии стандартной библиотеки.
Для последних версий GCC (по крайней мере, до 4.6.2) List
и версии, основанные на List
, не имеют постоянного времени, а реализованы как { return std::distance(begin(), end()); }
.
Стандартная библиотека MSVC отслеживает размер по мере ее изменения и просто возвращает свое значение (что составляет splice()
O (n), потому что она должна считать, когда сращивается).
Из моего /usr/include/c++/4.6.2/bits/stl_list.h
:
/** Returns the number of elements in the %list. */
size_type
size() const
{ return std::distance(begin(), end()); }
vector
, set
, deque
и map
- постоянное время.,
это std::deque
*
size_type
size() const
{ return this->_M_impl._M_finish - this->_M_impl._M_start; }
queue
и stack
на самом деле являются адаптерами контейнера и зависят от нижележащего контейнера, который можно указать.Однако по умолчанию используется значение deque
, которое является константой.