2020-12-30

作者: 预眸丶 | 来源:发表于2020-12-30 23:34 被阅读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使用了连续分配的内存,删除一个元素导致后面所有的元素会向前移动一个位置。

    相关文章

      网友评论

        本文标题:2020-12-30

        本文链接:https://www.haomeiwen.com/subject/qjwkoktx.html