繁体   English   中英

C ++-向量迭代器不可递增错误

[英]C++ - Vector iterator not incrementable error

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

我什么都不会删除...我只想在每个偶数迭代中插入一个值。

像这样:如果我有这个向量[1,2,3,4,5]

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

[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.

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