程序员Step-by-step

2020-12-30

2020-12-30  本文已影响0人  预眸丶

vector无法使用push_front,因为vector的push_front会出现O(n)的操作,为了避免产生与vector中push_back O(1)的错觉,故而没有push_front,insert同为O(n)操作。在stl中,如果需要使用push_front去插入在最前同时又是O(1)操作。deque是双向开口的连续线性空间(动态将多个连续空间通过指针数组接合在一起)


对于STL中,使用erase迭代器,迭代器是否失效的问题,需要考虑该数据结构的储存类型,是链式存储容器还是序列式存储容器:

对于链表式容器(如list,map),删除当前的iterator,仅仅会使当前的iterator失效,这是因为list之类的容器,使用了链表来实现,插入、删除一个结点不会对其他结点造成影响。

只要在erase时,递增当前iterator即可,并且erase方法可以返回下一个有效的iterator。

而数组vector则会失效,因为所有元素都要往前挪一位:

对于序列式容器(如vector,deque),序列式容器就是数组式容器,删除当前的iterator会使后面所有元素的iterator都失效。这是因为vetor,deque使用了连续分配的内存,删除一个元素导致后面所有的元素会向前移动一个位置。

上一篇下一篇

猜你喜欢

热点阅读