Adakah `std::list::size()` Sentiasa O(1)?

Barbara Streisand
Lepaskan: 2024-11-24 04:30:10
asal
167 orang telah melayarinya

Is `std::list::size()` Always O(1)?

Adakah senarai::size() Benar-benar O(1)?

Walaupun pernah benar bahawa std::list::size () mempamerkan kerumitan berubah-ubah merentas pelaksanaan, C 11 telah menyeragamkan kelakuannya. Jadual 96 Keperluan Bekas mewajibkan kerumitan berterusan (O(1)) untuk operasi .size() pada semua bekas standard.

Walau bagaimanapun, pengecualian ketara kekal sebagai pelaksanaan libstdc gcc sebelum versi 5.0. Walaupun keperluan standard C 11, fungsi .size()nya menggunakan algoritma O(N), seperti yang dilihat dalam petikan berikut:

size_type
size() const _GLIBCXX_NOEXCEPT
{ return std::distance(begin(), end()); }
Salin selepas log masuk

Keputusan ini berpunca daripada pertimbangan pengoptimuman dalam libstdc . Mengekalkan kiraan elemen yang berasingan daripada melintasi senarai meningkatkan prestasi untuk sesetengah kes penggunaan, walaupun ia bercanggah dengan keperluan kerumitan standard.

Pelaksanaan Libc, sebaliknya, mematuhi O(1) dengan betul kerumitan, seperti yang digambarkan oleh coretan kod berikut:

_LIBCPP_INLINE_VISIBILITY
size_type size() const _NOEXCEPT     {return base::__sz();}

...

__compressed_pair<size_type, __node_allocator> __size_alloc_;

_LIBCPP_INLINE_VISIBILITY
const size_type&amp; __sz() const _NOEXCEPT
    {return __size_alloc_.first();}
Salin selepas log masuk

Kesimpulannya, manakala piawaian C 11 memberi mandat Kerumitan O(1) untuk std::list::size(), pelaksanaan libstdc gcc sebelum versi 5.0 kekal sebagai anomali, sebaliknya menggunakan algoritma O(N).

Atas ialah kandungan terperinci Adakah `std::list::size()` Sentiasa O(1)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan