为什么这个迭代器比较失败?

时间:2014-03-25 17:00:21

标签: c++

请参阅以下代码:

if((pos = find()) != _sym.end())
{
    // do stuff
}

pos是类型为std::vector<T>::const_iterator的范围变量,其中T是包含一对相同类型迭代器的POD结构。

_symstd::vector<T>类型的私有类成员变量。

示例代码在Visual Studio 2013下引发运行时断言错误,并显示消息Expression: vector iterators incompatible。错误发生在第{240行的<vector>

另一方面,如果我重写代码:

pos = find();
if(pos != _sym.end()) // do stuff

然后,迪斯科。

我非常确定将初始化的迭代器(例如end())与未初始化的迭代器进行比较会导致此断言;我不明白的是,当执行比较运算符时,pos是否在初始化状态下被视为{{1}}。

1 个答案:

答案 0 :(得分:1)

这可能是相关的。

Why am I getting "vector iterators incompatible"?

我不认为find()会改变_sym.end()?