为什么我看不到任何输出迭代这个向量?

时间:2016-04-07 07:58:22

标签: c++ vector iteration

这是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工作...

1 个答案:

答案 0 :(得分:4)

当您删除5时,i = array.erase(i);会将迭代器留在end()。但是你会i++移动到最后,导致未定义的行为。

要解决此问题,请更改您的逻辑,以便i++仅在未发生i = array.erase(i);的迭代中发生。

注意:您只需撰写*i == 2 || *i == 5而不是index