Удаление элементов в stl :: vector с использованием индексов

У меня есть 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]);
        }
    }
}

18
задан Community 23 May 2017 в 12:25
поделиться