Can you pop_back a vector and still use the iterator to the last element?
问题 I wonder what happens if I have an iterator on the last element of the vector and do pop_back . std::set<int> s; s.insert(5); std::vector<int> v = {1, 2, 3, 4, 5}; for (auto it = v.begin(); it != v.end();) { if (s.count(*it)) { std::swap(*it, v.back()); v.pop_back(); } else { ++it; } } Code above works properly ( v is {1, 2, 3, 4} after that block) at least with clang, but is it correct to check if it == v.end() if it is invalidated? 回答1: Your instincts are good; vector::pop_back invalidates