Назад к вопросам
Middle
90
questionbank

Как удалить элемент из вектора, не заботясь о порядке, если он является константой?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

#include <vector>
#include <algorithm>

// Функция для удаления элемента из вектора без сохранения порядка
template<typename T>
void remove_unordered(std::vector<T>& vec, const T& value) {
    // Находим итератор на первый найденный элемент с заданным значением
    auto it = std::find(vec.begin(), vec.end(), value);

    //std::find возвращает vec.end(), если элемент не найден.
    if (it != vec.end()) {
        // Если элемент найден, меняем его местами с последним элементом
        std::iter_swap(it, vec.rbegin());
        // Затем удаляем последний элемент (который теперь содержит искомое значение)
        vec.pop_back();
    }
}

/* Пример использования:
int main() {
    std::vector<int> numbers = {1, 5, 3, 5, 2};
    const int value_to_remove = 5;

    remove_unordered(numbers, value_to_remove); // Удалит один из элементов со значением 5

    // В numbers теперь будет {1, 2, 3, 5} или {1, 5, 3, 2} в зависимости от того,
    // какая 5 была найдена первой.

    return 0;
}
*/

Метод заключается в перемещении найденного элемента в конец вектора с помощью std::iter_swap и последующем удалении последнего элемента с помощью pop_back(). Это позволяет избежать затратной операции смещения всех последующих элементов.