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

Why does this iterator comparison fail?

本文关键字:比较 失败 迭代器 为什么      更新时间:2023-10-16

请参阅以下代码:

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

posstd::vector<T>::const_iterator类型的作用域变量,其中T是包含一对相同类型迭代器的pod结构体。

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

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

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

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

然后,迪斯科。

我很确定,比较一个初始化的迭代器(比如end())和一个未初始化的迭代器会导致这个断言;我不明白的是,当执行比较运算符时,pos是否/如何不被认为处于初始化状态。

这可能是相关的

为什么我得到"矢量迭代器不兼容"?

我不认为find() changes _sym.end()?