[英]Why I can't see any ouput iterating this vector?
這是我的代碼 :
#include <iostream>
#include <string>
#include <vector>
#include <cstdio>
using std::printf;
int main()
{
std::vector<int> array{1, 2, 3, 4, 5};
for(auto i = array.begin(); i != array.end(); i++) {
auto index = i - array.begin();
if(array[index] == 2 || array[index] == 5) {
i = array.erase(i);
}
printf("iteration | %ld\n", index);
}
}
為什么我不能從中得到任何輸出? 使用cout代替printf可以工作...
當您擦除5
, i = array.erase(i);
將迭代器保留在end()
。 但是,然后您執行i++
,它就結束了,從而導致不確定的行為。
要解決此問題,請更改邏輯,以使i++
僅出現在其中i = array.erase(i);
迭代中i = array.erase(i);
沒有發生。
注意:您可以只寫*i == 2 || *i == 5
*i == 2 || *i == 5
而不是index
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.