【问题标题】:why is the vector throwing this assertion failed alert?为什么向量会抛出此断言失败警报?
【发布时间】:2013-12-22 12:38:42
【问题描述】:

我在调试模式下运行我的代码,程序弹出断言失败消息。请帮我找出导致此断言失败的部分。 :{

Debug Assertion Failed!
Expression: vector iterators incompatible

代码:

int main()
{
vector<int> a(5);
fill(a.begin(), a.end(), 5);
a[2] = 3;
a[1] = 2;  //so now a = {5,2,3,5,5} 

auto it = a.begin();
for (; it != a.end();)
{
    if (*it == 5)
        a.erase(it);  //Remove 5
    else
        it++;
}
copy(a.begin(), a.end(), ostream_iterator<int>(cout, "\n"));
}

【问题讨论】:

  • 顺便说一句,std::remove 已经这样做了,如果你使用擦除删除成语。

标签: c++ vector assertion


【解决方案1】:

当您在迭代期间擦除时,被擦除的迭代器将变为(并且其他可能变为)无效:

制作:

it = a.erase(it);

【讨论】:

    猜你喜欢
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 2018-07-26
    • 1970-01-01
    相关资源
    最近更新 更多