繁体   English   中英

向量迭代器不兼容:DEBUG

[英]Vector iterators incompatible: DEBUG

为什么这段代码给我错误:向量迭代器不兼容

这段代码可追溯到Rogue Wave文件tpordvec.h

    std::vector<T*> v;
    const T* a  // Where T is a template Class 
    for (std::vector<T*>::iterator p = v.begin(); p != v.end(); p++)
    {
        if (**p == *a)
        {
            T* temp = *p;
            if ( v.erase(p) == v.end()) //ASSERTION ERROR HERE
               return NULL;

            return temp;
        }
    }

http://en.cppreference.com/w/cpp/container/vector/erase

迭代器和对已删除元素的引用以及对它们与容器末尾之间的元素的引用均无效。 过去的迭代器也无效。

因此,如果在vector.end()vector.erase()真正擦除之前对vector.erase()进行了评估,并通过这种方式使迭代器无效,直到end() ,则对operator==()的调用将介于两个不兼容的对象之间迭代器。

这样的事情会更好:

auto it = v.erase(p); 
if ( it == v.end())
{ 
       return NULL;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM