0
像std::vector
這樣的傳統矢量有一些n元素和使用push_back
方法的追加元素,我們可以說,我們正在做實時操作嗎?將元素附加到矢量 - 它是實時操作嗎?
從知識的角度來看,每當向量中的元素加倍時,內存就會再次被重新分配,我們可以預測有多少元素可以執行操作需要多長時間,所以我們可以說當它可能具有O(n)和O(1)的複雜性時。另一方面,實時算法應該非常穩定,因此根據一些內部條件有兩個複雜性可能是不可接受的。
那到底怎麼樣?
是的我知道了,仍然存在的問題是我們是否可以稱之爲實時操作,因此我們可以在關鍵操作中使用矢量。 – DawidPi
並非所有的'std :: vector'實現都必須增加分配長度的兩倍。例如,Visual C++增長1.5倍。只要該因子大於1,您就可以得到攤銷時間。當因子達到2或更高時,則可以對地址空間進行病態消耗(在之前的增長操作中釋放的所有空間都不能形成足夠大的空間來再次加倍)。這在通用系統中很少涉及,但是,由於您在詢問實時情況,因此您可能需要考慮更多受限制的地址空間。 –
如果您必須使用動態調整大小的可增長陣列,請在您獲得時間時進行預分配......例如,您獲得了一些RT關鍵ISR,然後在稍後執行一次後調用一些維護例程,並在需要時預先分配陣列(不是一次全部...) – Spektre