数组和链表的时间复杂度

数组的时间复杂度

操作时间复杂度
头插(vector没有此操作)O(1)
push_backO(1)
insertO(n)
eraseO(n)
随机访问O(1)

链表的时间复杂度

操作时间复杂度
push_front(头插)O(1)
push_backO(1)
insertO(1)
eraseO(1)

随机访问

O(n)

如何理解vector的erase的时间复杂度是o(n)?

因为vector底层是连续的数组,因此erase之后需要重新分配空间,它的时间等于删除元素的时间加上剩下的元素移动的时间.

Because vectors use an array as their underlying storage, erasing elements in positions other than the vector end causes the container to relocate all the elements after the segment erased to their new positions. This is generally an inefficient operation compared to the one performed for the same operation by other kinds of sequence containers (such as list or forward_list).

Complexity:Linear on the number of elements erased (destructions) plus the number of elements after the last element deleted (moving).

与(被删除(析构操作)元素的个数+剩余元素的个数(移动操作))成正比.即为o(n)

英文来源:http://www.cplusplus.com/reference/vector/vector/erase/

如何理解随机访问?

例如vector,iterator i = v.begin()+N,得到第N+1个元素的迭代器。可以直接通过+N的方式跳到要访问的位置。

而list不是随机访问,想要到第N+1个元素位置,需要一个一个遍历,才能找到,因此不能够用+N的方法。需要使用advance(i, N)的方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodingLife99

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值