Здравствуйте, я пытаюсь получить доступ к элементу вектора, содержащего кучу объектов класса и удаляя только один из объектов из вектора.Использование итераторов 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;
}
Я знаю, что этот код не будет работать. Я читал некоторые вещи в Интернете о том, как использовать итераторы, однако, когда я пытаюсь выявить некоторые из предложенных ошибок. На самом деле то, что у меня здесь, вызывает несколько ошибок.
Мой план этой функции состоял в том, чтобы перебирать вектор vObjects, содержащий элементы указателя Ogre :: SceneNode. Если один из элементов соответствует имени mPickedObj, то я хочу удалить его из вектора с помощью .erase() foo. Вышеприведенный код не работает, он был только как пример, хотя это то, что я пробовал в своем приложении.
Стирание с середины 'std :: deque' также приводит к тому, что некоторые элементы« перемещаются вниз, чтобы закрыть промежуток » –
Ваша оценка 80% слишком низкая. И стирание с начала вектора еще хуже, чем удаление из середины. –