繁体   English   中英

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

[英]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可以工作...

当您擦除5i = 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM