Как удалить первое вхождение значения из вектора?
Я пытаюсь получить один элемент из вектора и нажать его на заднюю часть вектора, а затем удалить его, чтобы у меня не было пустого раздела в памяти. Идиома 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);
}