У меня есть stl :: vector
, и мне нужно удалить все элементы по заданным индексам ( вектор обычно имеет большую размерность). Я хотел бы знать, что является наиболее эффективным способом выполнения такой операции, имея в виду, что порядок исходного вектора должен быть сохранен.
Хотя я нашел похожие сообщения по этой проблеме, некоторые из них необходимо было удалить один один элемент или несколько элементов , где идиома удаление-стирание казалась хорошим решением.
Однако в моем случае мне нужно удалить несколько элементов, и поскольку я использую индексы вместо прямых значений, идиома удаления-стирания
не может быть применена, верно?
Мой код приведен ниже, и я хотел бы знать, можно ли добиться большего с точки зрения эффективности?
bool find_element(const vector & vMyVect, int nElem){
return (std::find(vMyVect.begin(), vMyVect.end(), nElem)!=vMyVect.end()) ? true : false;
}
void remove_elements(){
srand ( time(NULL) );
int nSize = 20;
std::vector vMyValues;
for(int i = 0; i < nSize; ++i){
vMyValues.push_back(i);
}
int nRandIdx;
std::vector vMyIndexes;
for(int i = 0; i < 6; ++i){
nRandIdx = rand() % nSize;
vMyIndexes.push_back(nRandIdx);
}
std::vector vMyResult;
for(int i=0; i < (int)vMyValues.size(); i++){
if(!find_element(vMyIndexes,i)){
vMyResult.push_back(vMyValues[i]);
}
}
}