1. 程式人生 > >[面試] C++ STL(一)—— 向一個vector中新增N個元素,平均的新增的效能是?

[面試] C++ STL(一)—— 向一個vector中新增N個元素,平均的新增的效能是?

考慮如下的程式碼輸出:

int N = 100;
vector<int> v;
set<int> s;
for (int i = 0; i < N; ++i)
{
    s.insert(v.capacity());
    v.push_back(i);
}
for (auto& e : s)
    cout << e << " ";
cout << endl;

可以看到空間的變化是0,1,2,4,8,16,…,128.(注:GCC 編譯器是如此,vc 不是,二者提供了不同的 vector 實現)。

這就需要考慮到當空間不足時,需要開闢新的記憶體並且發生元素的copy(原始空間的釋放). 一般情況下(GCC)開闢的空間是原來的2倍。那麼平均的新增時間是:

1N(1+2+4++2logN)

log 為以二為底的對數, 表示向上取整;

平均下來依舊是O(N)。