С++: Удаляем из std::vector по вектору индексов

Для того, чтобы удалить элементы из вектора, индексы которых находятся в другом векторе, может пригодиться этот небольшой хэлпер

template<typename T>
void fastDeleteFromVectorByIndexes(std::vector<T>& v, std::vector<int>& deleteIndexes )
{
    if (deleteIndexes.size() == 0)
        return;
    if (deleteIndexes.size()>v.size())
        throw std::exception();
    if (deleteIndexes.size()==v.size()) {
        v.clear();
        return;
    }
    for (size_t i = 0 ; i < deleteIndexes.size() ; ++i) {
        int x1 = deleteIndexes[i];
        int x2 = v.size() - i - 1;
        std::swap(v[x1], v[x2]);
    }
    v.erase(v.end() - deleteIndexes.size(), v.end() );
}

 

Запись опубликована в рубрике На заметку с метками , , . Добавьте в закладки постоянную ссылку.

Один комментарий: С++: Удаляем из std::vector по вектору индексов

  1. Олег говорит:

    Алгоритм меняет порядок элементов исходного вектора и чувствителен к дублированию индексов в deleteIndexes.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *