第六点 :这里实际上就是强调erase的用法,erase会把迭代器的指向it删除,然后返回下一个迭代器的位置,这个新的位置需要迭代器重新接收一下,不然会出现未定义的错误。#include <iostream> #include <vector> int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; for (auto it = vec.begin(); it != vec.end(); ) { if (*it == 3) { it = vec.erase(it); // 删除元素并返回下一个有效迭代器,这样写是对的 } else { ++it; } } for (int v : vec) { std::cout << v << " "; // 输出: 1 2 4 5 } return 0; } //------------------------------------------------------------------- for (auto it = vec.begin(); it != vec.end(); ++it) { // 错误写法 if (*it == 3) { vec.erase(it); // 删除元素,但未更新迭代器 } }</int></vector></iostream>
点赞 评论

相关推荐

牛客网
牛客网在线编程
牛客网题解
牛客企业服务