之前有一些关于这个问题的问题;我的理解是调用 std::vector::erase 只会使位于被擦除元素之后的迭代器无效.但是,擦除元素后,该位置的迭代器是否仍然有效(当然,前提是擦除后它不指向 end())?
我对如何实现向量的理解似乎表明迭代器绝对可用,但我不完全确定它是否会导致未定义的行为.
作为我正在谈论的一个例子,以下代码从向量中删除所有奇数.这段代码会导致未定义的行为吗?
typedef std::vector<int> vectype; vectype vec; for (int i = 0; i < 100; ++i) vec.push_back(i); vectype::iterator it = vec.begin(); while (it != vec.end()) { if (*it % 2 == 1) vec.erase(it); else ++it; }
代码在我的机器上运行良好,但这并不能让我相信它是有效的.