Vector迭代器不可递增错误

C++ - Vector iterator not incrementable error

本文关键字:错误 迭代器 Vector      更新时间:2023-10-16

我有myVector与一些值的类型Texture_Map这只是一个int

我没有擦掉任何东西…我只是想在每一次偶数迭代中插入一个值。

类似:如果有向量[1,2,3,4,5]

我的Texture_Map::TEXTURE_FLIP99,那么我的最终向量应该是:

[99,1,99,2,99,3,99,4,99,5]

在第一个insert()之后,我得到了"Vector迭代器不可递增问题"错误。

代码:

myVector.push_back(Texture_Map::TEXTURE_INIT);
for(unsigned int i = 0 ; i < m_max_pieces-2; i++)
    myVector.push_back((Texture_Map::TextureID)i);
std::random_shuffle(myVector.begin(), myVector.end());
std::vector<Texture_Map::TextureID>::iterator it = myVector.begin();
for (it=myVector.begin(); it<myVector.end(); it++)
{
    myVector.insert(it,Texture_Map::TEXTURE_FLIP);
}

谢谢!

在vector上使用insert的部分后果是:

导致重新分配,如果新的大小()大于旧的容量()。如果新的size()大于capacity(),则所有迭代器和引用都无效。否则,只有插入点之前的迭代器和引用仍然有效。过末端迭代器也失效。

你看到的问题是,你试图增加一个不再有效的迭代器——它已经超过了插入点,所以它是无效的。这里的解决方案是利用insert返回iterator:

的事实。
iterator insert( iterator pos, const T& value );
专:


返回值指向插入值

的迭代器

所以你想:

for (it=myVector.begin(); it<myVector.end(); it++) {
    // now it will point to TEXTURE_FLIP
    it = myVector.insert(it,Texture_Map::TEXTURE_FLIP);
    // now it will point back to the original element
    ++it;
}