博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
迭代器失效的问题
阅读量:3940 次
发布时间:2019-05-24

本文共 862 字,大约阅读时间需要 2 分钟。

文章目录

迭代器失效的问题,与容器的底层的数据结构有关。
当遍历迭代器的时候,每一次都会判断当前迭代器是否已经到达末尾的迭代器

  • 不同容器的迭代器是不能进行比较的
  • 容器的元素进行增加、删除操作后,原来的迭代器就全部失效了就会报迭代器失效

vector

(底层时一个可动态扩容的数组,数据的增加与删除都会影响到其他的数据的位置,所以当进行数据增删的时候,其他数据的迭代器有可能会失效)

  1. 当插入(push_back)一个元素后,end操作返回的迭代器肯定失效。

  2. 当插入(push_back)一个元素后,capacity返回值与没有插入元素之前相比有改变,则需要重新加载整个容器,此时begin和end操作返回的迭代器都会失效。

  3. 当进行删除操作(erase,pop_back)后,指向删除点的迭代器全部失效;指向删除点后面的元素的迭代器也将全部失效。

deque

(底层时一个可动态扩容的数组,数据的增加与删除都会影响到其他的数据的位置,所以当进行数据增删的时候,其他数据的迭代器有可能会失效)

  1. 在deque容器首部或者尾部插入元素不会使得任何迭代器失效。

  2. 在其首部或尾部删除元素则只会使指向被删除元素的迭代器失效。

  3. 在deque容器的任何其他位置的插入和删除操作将使指向该容器元素的所有迭代器失效。

list

  1. 删除一个元素的时候,只有当前的迭代器失效,其前后的迭代器不会失效
  2. 添加一个元素的时候,迭代器不会失效
    (内存不是连续的,所以节点的增删不会影响到其他节点的存储,所以在进行数据的增删的时候,其他节点的迭代器不会失效)

关联容器set map unordered_set unordered_map

关联容器删除一个元素的时候,当前的迭代器会失效,其他的迭代器不会失效,增加一个元素的时候,迭代器不会失效

关联容器底层的数据结构
有序关联容器->>红黑树(每个数据一个节点,所以其他数据的删除不影响当前节点的内存的位置)
无序关联容器->>哈希表(链式哈希表,每个数据存储占据一个节点,所以增删操作,数据之间相互不影响)

转载地址:http://uanwi.baihongyu.com/

你可能感兴趣的文章
软件测试管理—如何写好软件测试计划书
查看>>
解读一名软件测试经理所需要具备的能力
查看>>
有效的软件测试度量
查看>>
机器学习界大牛林达华推荐的书籍
查看>>
path变量备份
查看>>
Lesson2.2 & 2.3 Maya command reference & quick help
查看>>
lesson 2.4 - Converting MEL Commands to Python
查看>>
Lesson3.2 variables
查看>>
3.4.2 - Operators & 3.4.3 division and truncation
查看>>
3.7.1 - Strings
查看>>
3.7.4 - Indexing and Slicing Strings
查看>>
3.7.5 - Modifying Strings
查看>>
3.7.6 - String Methods
查看>>
3.8 - Using the Print Function
查看>>
3.9.1 - Lists in Python
查看>>
3.9.2 - Lists - Adding and Removing Objects
查看>>
3.9.3 - Sorting Lists
查看>>
3.10 - Maya Commands: ls
查看>>
3.11 - Dictionaries in Python
查看>>
3.12 - Tuples in Python
查看>>