[英]C++ - Vector iterator not incrementable error
我的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);
}
谢谢!
在向量上使用insert
的结果的一部分是:
如果新的size()大于旧的Capacity(),则导致重新分配。 如果新的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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.