我在閱讀Herb Sutter的More Exceptional C++關於實現字符串時選擇的增長策略。他列出以下內容:動態數組的時間複雜度和增長策略
1)確切增長。在此策略中,新緩衝區的尺寸與當前操作所需的尺寸完全相同
優點:無浪費空間。
缺點:性能不佳。這種策略需要每個字符的O(N)分配和平均O(N)複製操作,但在最壞的情況下需要一個高的常數因子......
2)固定增量增長。新的緩衝區應該是比當前緩衝區大的固定量
優點:浪費的空間很小。緩衝區中未使用的空間量由增量大小限定,並且不隨字符串的長度而變化。
缺點:表現中等。該策略需要O(N)分配和每個字符的平均O(N)複製操作。也就是說,分配數量和給定字符被複制的平均次數都隨字符串的長度而線性變化。 但是,常量因子的控制權在String實施者手中。
注:字符由1個
問題1添加到字符串1:如何常數因子在兩個控制?我不知道這裏的草本點
問題2:固定增量如何定義爲O(N),將不會取決於固定大小的使用情況,如果說它的100個字符,在第一次調整大小後,接下來的99次插入是O(1),那麼爲什麼要考慮O(N)呢?
我很好奇,他說他爲什麼不列出幾何增長?就我所能做出的結論來看,這就產生了分攤不變的開銷,對於因子x的增長,開銷從下面收斂於(x /(x-1)),因此對於增長因子2,將緩衝器加倍,增加的開銷是2倍,緩衝區中的所有內容平均最多被複制兩次。增長因子1.5,開銷因子3等等。 – jthill