这是my code:
#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工作...
答案 0 :(得分:4)
当您删除5
时,i = array.erase(i);
会将迭代器留在end()
。但是你会i++
移动到最后,导致未定义的行为。
要解决此问题,请更改您的逻辑,以便i++
仅在未发生i = array.erase(i);
的迭代中发生。
注意:您只需撰写*i == 2 || *i == 5
而不是index