【发布时间】:2015-03-24 05:13:03
【问题描述】:
有人能解释一下为什么这个代码片段会通过循环运行一次,然后给出断言失败表达式:向量迭代器不可递减吗?
for (auto an = a.rbegin(); an != a.rend(); ++an, indexA--) //first number
{
for (auto bn = b.rbegin(); bn != b.rend(); ++bn) //second number
{
if (*an - *bn >= 0)
{
returnVal.push_back(*an - *bn);
a.pop_back();
b.pop_back();
}
else
{
brrow = *an + 10;
a.at(indexA - 1) = a.at(indexA - 1) - 1; // remove 1 from the spot ahead of current digit
returnVal.push_back(brrow - *bn);
a.pop_back();
b.pop_back();
}
}
}
【问题讨论】:
-
你在迭代过程中修改
vector的内容!这使得迭代器无效! -
有没有办法可以在我 pop_back 时重新验证迭代器?
-
不!这是不可能的 AFAIK。
-
呃...实际上 pop_back() 只会使结束和返回无效。其他迭代器应该仍然有效。
-
使
end()无效使rbegin()无效。