7

Как удалить элемент из std::vector<> по индексу?

1

Я имею вектор типа <code>std::vector&lt;int&gt;</code>, и мне нужно удалить n-й элемент. Как это сделать?

Пример:

std::vector<int> vec;

vec.push_back(6);
vec.push_back(-17);
vec.push_back(12);

vec.erase(???);

5 ответ(ов)

8

Чтобы удалить отдельный элемент, вы можете воспользоваться следующим кодом:

std::vector<int> vec;

vec.push_back(6);
vec.push_back(-17);
vec.push_back(12);

// Удаляет второй элемент (vec[1])
vec.erase(std::next(vec.begin()));

Если же нужно удалить сразу несколько элементов, можно сделать это следующим образом:

// Удаляет второй и третий элементы (vec[1], vec[2])
vec.erase(std::next(vec.begin(), 1), std::next(vec.begin(), 3));
5

Метод erase для std::vector перегружен, поэтому, чтобы сделать код более понятным, лучше использовать следующий вызов:

vec.erase(vec.begin() + index);

Это позволит удалить только один элемент по указанному индексу.

0

Ваш код на C++ выглядит корректно и делает то, что предназначено: удаляет элемент из вектора по указанной позиции.

Однако, я бы предложил несколько улучшений:

  1. Проверка границ: Перед тем как пытаться удалить элемент по позиции, стоит проверить, находится ли позиция в пределах допустимого диапазона, чтобы избежать возможных ошибок времени выполнения.

  2. Использование std::vector::erase: Вместо явного использования std::advance можно использовать vec.begin() + pos, что делает код более понятным и избегает лишней пертурбации итератора.

Вот обновленная версия вашей функции с учетом этих рекомендаций:

#include <vector>
#include <iostream>

template <typename T>
void remove(std::vector<T>& vec, std::size_t pos)
{
    if (pos < vec.size()) // Проверка на допустимость позиции
    {
        vec.erase(vec.begin() + pos);
    }
    else
    {
        std::cerr << "Ошибка: позиция вне диапазона." << std::endl; // Сообщение об ошибке
    }
}

Теперь ваш код более безопасен и информативен.

0

Метод erase будет использоваться двумя способами:

  1. Удаление одного элемента:
vector.erase( vector.begin() + 3 ); // Удаление четвертого элемента
  1. Удаление диапазона элементов:
vector.erase( vector.begin() + 3, vector.begin() + 5 ); // Удаление с четвертого до шестого элемента
0

Чтобы удалить элемент по индексу в векторе, используйте следующий код:

vec.erase(vec.begin() + index);

Если вам нужно удалить элемент по значению, вы можете использовать функцию find для поиска элемента и затем удалить его:

vec.erase(find(vec.begin(), vec.end(), value));

Не забудьте подключить заголовочный файл <algorithm>, чтобы использовать функцию find:

#include <algorithm>

Таким образом, вы сможете эффективно удалять элементы как по индексу, так и по значению в вашем векторе.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь