迭代器小结

  • 每次修改容器的时候,可能会改变容器本身,需要重新获取迭代器

    1
    2
    3
    4
    5
    6
    7
    8
    vector<int>::iterator p=a.begin();
    a.insert(p+1,1);
    p = a.begin();
    ……
    p = a.begin();
    a.erase(p,p+5);
    p = a.begin();
    -------------------------------

    在这里,p应该就是指向第一个元素的迭代器,但为什么我们还要重置呢?当我们插入或者是删除元素时,是有可能改变容器本身的,就比如,他可能会迁移到其他地方,就算不迁移到其他地方,不管是插入元素或者是删除元素,也足以令一部分迭代器失效,所以,如果我们不重置p的话,我们接下来使用的会是无效的迭代器,这足以令程序宕掉,所以,为了安全起见,无论我们是插入元素还是删除元素,当我们要用迭代器时,就记得重迭代器

  • 定义了迭代器,但没有将迭代器绑定到对象上,不能使用该迭代器


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!