簡體   English   中英

恆定時間std :: list調整為給定的最后一個元素的大小?

[英]Constant time std::list resize to a given last element?

調整std::list大小是線性時間,因為它需要首先找到第n個元素。

但是是否有可能指向一個元素(使用迭代器)並通過聲明指向的元素是新的最后一個元素而在恆定時間內調整大小?

就像這樣: make_last(const_iterator pos)

不幸的是,在C ++ 11中,一般的std::list拼接是O(n),以便進行O(1)大小檢查。

否則,您可能已將不希望的項目移至另一個列表。

但這只是解決方案的一半,因為必須在某個時刻銷毀這些物品。 但是,如果保證了恆定的時間拼接,這將使臨時調整大小為O(1)。


一個實際的解決方案是使用例如std::vector而不是std::list

由於銷毀的必要性,它不會給您O(1)調整大小,除非調整大小在最后會丟棄恆定數量的項目,但是避免了所有這些復雜性。

決定使std::list::size進行恆定時間操作,我不知道將std::list用於其他任何原因。

在C ++ 03中,您對不需要的第一個元素使用了擦除 -恆定時間,前提是優化器意識到不需要破壞元素。

在C ++ 11中,您已經塞滿了……如Alf所言,它必須計算出新的尺寸。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM