出于某种原因,这个简单的代码可以在我的台式机上很好地工作,但是当我在笔记本电脑上尝试该代码时,只有第一部分(打印 vector 的元素)可以工作,然后程序结束,而不是说“进程以退出代码0完成”
“进程以退出代码-1073741819(0xC0000005)完成。”我不知道笔记本电脑怎么了。谁能帮我?

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> array{1, 2, 3, 4, 5};
    vector<int>::iterator it;
    int arraysize;
    for (int i = 0; i < array.size(); i++) {
    cout << array[i] << endl;
    }
    cout << " " << endl;

    for (it = array.begin(); it < array.end(); it++) {
        if(*it%2==0){
            array.erase(it);
            it--;
        }
    }
    arraysize=array.size();
    cout<<"size:"<<arraysize<<endl;
    for (int i = 0; i < array.size(); i++) {
        cout << array[i] << endl;
    }



    return 0;
}

最佳答案

问题不在于计算机,而在于代码。array.erase(it);使迭代器it无效,并且对其的任何后续使用都具有未定义的行为。
最糟糕的未定义行为是看起来有效的行为。erase在元素删除之后将迭代器返回到元素,您应该使用它。

for (it = array.begin(); it < array.end(); it++) {
    if(*it%2==0){
        it = array.erase(it);
        it--;
    }
}
要么
it = array.begin();
while (it < array.end()) {
    if(*it%2==0){
        it = array.erase(it);
    }
    else {
        it++;
    }
}

关于c++ - C++代码在台式机上可以正常运行,但在笔记本电脑上不能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62550887/

10-11 23:14
查看更多