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