C++容器遍历时删除元素
生活随笔
收集整理的這篇文章主要介紹了
C++容器遍历时删除元素
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
vector
錯(cuò)誤做法
這樣做會(huì)在遍歷過程中越界導(dǎo)致程序崩潰
std::vector<int> vecInt({ 1, 3, 2, 1, 4, 1 });for (auto i = vecInt.begin(); i != vecInt.end() ; ++i) {if (*i == 1) {vecInt.erase(i);}}正確做法
std::vector<int> vecInt({ 1, 3, 2, 1, 4, 1 });for (auto i = vecInt.begin(); i != vecInt.end();) {if (*i == 1) {vecInt.erase(i);}else {++i;}}調(diào)用erase函數(shù)后迭代器會(huì)指向被刪除元素的下一個(gè)元素,如果被刪除的元素是容器最后一個(gè)元素,則指向容器的end()
map
錯(cuò)誤做法
std::map<int, std::string> map_i_s;map_i_s.insert({ 1, "1" });map_i_s.insert({ 2, "2" });map_i_s.insert({ 3, "3" });for (auto i = map_i_s.begin(); i != map_i_s.end(); ++i;) {if (i->first > 2) {map_i_s.erase(i);}}正確做法
std::map<int, std::string> map_i_s;map_i_s.insert({ 1, "1" });map_i_s.insert({ 2, "2" });map_i_s.insert({ 3, "3" });for (auto i = map_i_s.begin(); i != map_i_s.end(); ) {if (i->first > 2) {i = map_i_s.erase(i);}else {++i;}}set
list
stack
queue
總結(jié)
以上是生活随笔為你收集整理的C++容器遍历时删除元素的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt新添加的类无法链接
- 下一篇: 新乡看无精症最好的医院推荐