У меня есть stl::vector<int>
и мне нужно удалить все элементы с заданными индексами (вектор обычно имеет высокую размерность). Я хотел бы знать, какой способ выполнения такой операции наиболее эффективен, имея в виду, что порядок исходного вектора должен быть сохранен.
Хотя, я нашел соответствующие должности по этому вопросу, некоторые из них нужно удалить один единственный элемент или несколько элементов, где удалить стирания идиомы, казалось бы хорошим решением. В моем случае, однако, мне нужно удалить несколько элементов, и поскольку я использую индексы вместо прямых значений, remove-erase idiom
не может быть применена, верно? Мой код приведен ниже, и я хотел бы знать, если это возможно сделать лучше, чем это с точки зрения эффективности?
bool find_element(const vector<int> & 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<int> vMyValues;
for(int i = 0; i < nSize; ++i){
vMyValues.push_back(i);
}
int nRandIdx;
std::vector<int> vMyIndexes;
for(int i = 0; i < 6; ++i){
nRandIdx = rand() % nSize;
vMyIndexes.push_back(nRandIdx);
}
std::vector<int> vMyResult;
for(int i=0; i < (int)vMyValues.size(); i++){
if(!find_element(vMyIndexes,i)){
vMyResult.push_back(vMyValues[i]);
}
}
}