在GCC中,std :: list的size()方法是O(n)。为什么?在GCC中,std :: list的size()方法是O(n)。为什么?
在标准C++ 11说大小(名单)应该是O(1) http://en.cppreference.com/w/cpp/container/list/size
然而,在我们的glibc有以下:
/usr/include/c++/4.6.3/bits/stl_list.h
template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
class list : protected _List_base<_Tp, _Alloc>
{
...
size_type
size() const
{ return std::distance(begin(), end()); }
的问题是:如何GCC中尚未实施三年前的要求吗?
编辑:海湾合作委员会5改变了这一点:虽然在ABI变化的代价;这意味着使用gcc 5.0编译的C++代码将不适用于旧版本的C++运行时库。
从 https://gcc.gnu.org/gcc-5/changes.html“的std ::列表的新的实现是默认启用,用O(1)尺寸()函数”
g ++ 4.5 is from 2010.获取最新版本! – 2014-10-27 03:31:50
很不错,在4.6.3中它也是一样的东西 – MichaelMoser 2014-10-27 03:39:41
在4.8.3中也是一样的! – Galik 2014-10-27 04:00:45