Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
一个非常简单的问题,但我找不到答案。允许它但要仔细检查会很有意义。
std::vector<int> v(10, 0); v.erase(v.end()); // allowed or not?
无效的位置或范围会导致未定义的行为。
从这里
迭代器 pos 必须有效且可取消引用。因此end() 迭代器(有效,但不可取消引用)不能用作 pos 的值。
end()对于单参数重载,传递给是无效的std::vector::erase,因为单参数重载将擦除该位置的元素。该end()位置没有元素,因为end()它超过了最后一个元素。
end()
std::vector::erase
但是,end()可以传递给erase采用 Iterator 范围的重载:
erase
vec.erase(vec.begin(), vec.end())