以下代码段在运行时提供错误消息:
调试断言失败:向量迭代器不可解除引用
for(it=stat1vec.begin(); *(it)>=investigated_stat; it++, positioner++)
{
if(*it==investigated_stat)
equalwith++;
}
更改为:
for(it=stat1vec.begin(); *(it)==investigated_stat; it++, positioner++)
{
if(*it==investigated_stat)
equalwith++;
}
代码完美无缺。
所有已完成的工作是将> =更改为==
为什么会这样?
非常感谢
答案 0 :(得分:3)
在解除引用之前,您应该测试迭代器是否是有效的迭代器。你的循环将一直持续到*it < investigated_stat
,但是当没有任何元素是>= investigated_stat
而你迭代超过向量的末尾时它就不会停止。
for循环中的测试应该是
it != stat1vec.end() && *it >= investigated_stat
这使得稍加修改for
:
for(it = stat1vec.begin(); it != stat1vec.end() && *it >= investigated_stat; ++it, ++positioner)
if(*it == investigated_stat)
++equalwith;
答案 1 :(得分:2)
似乎在到达向量末尾之前的某个时刻,您将零分配给*(it)
:此时循环终止。逻辑比较试图找到不同的东西 - 并且失败了。我假设您打算在第二个循环中编写==
。
请注意,迭代序列的惯用方法(不使用算法时)看起来像这样:
for (it = v.begin(), end = v.end(); it != end /* possible additional conditions */; ++it)
{
...
}