Как удалить первое вхождение значения из вектора?

Я пытаюсь получить один элемент из вектора и нажать его на заднюю часть вектора, а затем удалить его, чтобы у меня не было пустого раздела в памяти. Идиома erase-remove может это сделать, но она удаляет все экземпляры определенного значения. Я просто хочу убрать первую.

Я не слишком опытен со стандартными алгоритмами библиотеки, и я не могу найти соответствующие методы (если таковые имеются) для этого. Вот пример:

int main() {
    std::vector<int> v{1, 2, 3, 3, 4};

    remove_first(v, 3);

    std::cout << v; // 1, 2, 3, 4
}

Итак, как бы я пошел об удалении первого появления 3 из этого вектора?

2 ответов


сначала найдите его, затем сотрите:

auto it = std::find(v.begin(),v.end(),3);
// check that there actually is a 3 in our vector
if (it != v.end()) {
  v.erase(it);
}

Если вы не заботитесь о сохранении порядка элементов в векторе, вы можете избежать копирования "хвоста" оставшихся элементов при стирании:

auto it = std::find(v.begin(), v.end(), 3);
if (it != v.end()) {
  std::iter_swap(it, v.end() - 1);
  v.erase(v.end() - 1);
}