Trong GCC, phương thức size() của std :: list là O (n). Tại sao?Trong GCC, phương thức size() của std :: list là O (n). Tại sao?
cho C++ 11 trong Tiêu chuẩn nói size() của danh sách nên O (1) http://en.cppreference.com/w/cpp/container/list/size
Tuy nhiên trong glibc, chúng tôi đã điều sau đây:
/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()); }
Câu hỏi đặt ra là: Làm thế nào có phải là yêu cầu 3 năm chưa được thực hiện trong GCC?
EDIT: gcc 5 thay đổi điều này: mặc dù với chi phí thay đổi ABI; điều này có nghĩa là mã C++ được biên dịch với gcc 5.0 sẽ không hoạt động với các phiên bản cũ hơn của thư viện thời gian chạy C++.
từ https://gcc.gnu.org/gcc-5/changes.html "Một thực hiện mới của std :: danh sách được kích hoạt theo mặc định, với O (1) kích thước() chức năng"
g ++ 4.5 là từ năm 2010. Nhận phiên bản mới hơn! –
rất đẹp, trong 4.6.3 cùng một điều – MichaelMoser
Điều này cũng giống như trong 4.8.3! – Galik