今天做了一些Vector的工作,首先贴一下Ogre里的一些代码,因为是开源的,所以不涉及侵权问题哈
for (TextureDefMap::iterator j = texMap.begin(); j != texMap.end();)
以上的工作就是从一个Vector里删除一个元素,于是照着写一段代码
VectorType::iterator it = someVector.begin();
for (; it != someVector.end();)
{
if (*it== value)
{
someVector.erase(it);
}
else
{
++it;
}
}
执行代码以后会报错,错误异常 "vector iterators incompatible”
我也不知道为什么Ogre里面为什么没报错。
正确的做法是这样的:
STL里所有的容器类的erase实现都会返回一个iterator,这个iterator指向了“当前删除元素的后继元素,或是end()”
因此,在遍历容器的所有元素过程中通过erase删除一个元素后,将erase的返回值赋给迭代变量:
VectorType::iterator it = someVector.begin();
for (; it != someVector.end();)
{
if (*it== value)
{
it = someVector.erase(it);
}
else
{
++it;
}
}