我的myVector包含一些 Texture_Map 类型的值,它只是int
。
我没有删除任何内容......我只是想在每个偶数迭代中插入一个值。
像:
如果我有这个向量[1,2,3,4,5]
我的Texture_Map::TEXTURE_FLIP
是99
,那么我的最终矢量应该是:
[99,1,99,2,99,3,99,4,99,5]
在第一个insert()
之后,我得到" 向量迭代器不可递增的问题"错误。
代码:
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);
}
谢谢!
答案 0 :(得分:4)
作为向量使用insert
的结果的一部分是它:
如果新size()大于旧容量(),则会导致重新分配。如果new size()大于capacity(),则所有迭代器和引用都将失效。否则,只有插入点之前的迭代器和引用仍然有效。过去的迭代器也无效。
您遇到的问题是您尝试增加不再有效的迭代器 - 它已超过插入点,因此无效。这里的解决方案是利用insert
返回iterator
:
iterator insert( iterator pos, const T& value );
具体做法是:
返回值
1-2)迭代器指向插入的值
所以你想要:
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;
}