一、迭代器

  1. 在遍历容器时删除元素会导致迭代器失效,这是因为删除元素时改变了容器内元素的位置,从而让迭代器指向的元素位置不再有效。

  2. 如果要在遍历时删除元素,可以使用 erase 函数,erase 函数会返回指向被删除元素的下一个元素的迭代器,因此不会使迭代器失效。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <vector>

    int main() {
    std::vector<int> n{1,2,3,4,5};

    for (auto it = n.begin(); it != n.end();) {
    if (*it % 2 == 0) {
    it = n.erase(it)
    } else {
    ++it;
    }
    }
    }