簡體   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