你好我試圖訪問包含一堆類對象的矢量元素,並只刪除矢量中的一個對象。使用帶矢量的STL迭代器
問題是我不明白載體,我無法在網上找到任何信息,這是有幫助的。
我的代碼:
void MyExperiment::deselectSingle() {
Ogre::Vector3 vNewPos = mPickedObj->_getDerivedPosition();
mPickedObj->showBoundingBox(false);
mMoveThis->removeChild(mPickedObj->getName());
mSceneMgr->getRootSceneNode()->addChild(mPickedObj);
mPickedObj->_setDerivedPosition(vNewPos);
for (Ogre::SceneNode* it = vObjects.begin(); it < vObjects.end(); it++) {
static std::string objNameStr;
objNameStr = vObjects.at(*it )->getName();
if (objNameStr == mPickedObj->getName())
{
vObjects.erase(*it);
break;
}
}
if (mMoveThis->numAttachedObjects() == 0) bSelected = false;
return;
}
我知道這個代碼將無法正常工作。我在網上閱讀了一些關於如何使用迭代器的東西,但是當我嘗試一些建議的錯誤出現時。事實上,我在這裏導致了一些錯誤。
我對這個函數的計劃是遍歷包含Ogre :: SceneNode指針元素的vObjects向量。如果其中一個元素與mPickedObj的名稱匹配,那麼我想通過.erase()foo從矢量中刪除它。上面的代碼不起作用,它只是作爲一個例子,儘管這是我在我的應用程序中嘗試的。
從std :: deque的中間擦除也會導致某些元素「向下移動以縮小差距」 –
您的80%估計值太低。從矢量開始擦除比從中間擦除更糟糕。 –