问题: 将N个元素使用push_back插入到vector中, 求push_back操作的复杂度。
简单分析如下:
考虑vector每次内存扩充两倍的情况。
如果我们插入N个元素, 则会引发lgN次的内存扩充,而每次扩充引起的元素拷贝次数为
2^0, 2^1, 2^2, ..., 2^lgN.
把所有的拷贝次数相加得到
2^0 + 2^1 + 2^2 + ... + 2^lgN = 2 * 2^lgN - 1 约为 2N次
共拷贝了N次最后一个元素, 所以总的操作大概为3N
所以, 每个push_back操作分摊3次, 是O(1) 的复杂度。
————————————————
原文链接:https://blog.csdn.net/progliker/article/details/5347013