Назад к вопросам
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(). Это позволяет избежать затратной операции смещения всех последующих элементов.