В C++ удаление элементов векторов по одинаковому индексу можно выполнить несколькими способами. В данной ситуации мы предполагаем, что у вас есть два вектора vector1
и vector2
с одинаковым количеством элементов, и вы хотите удалить элементы с одинаковыми индексами.
1. С использованием цикла for
:
for (int i = 0; i < vector1.size(); i++) { vector1.erase(vector1.begin() + i); vector2.erase(vector2.begin() + i); }
В этом случае мы используем цикл for
, чтобы последовательно пройтись по элементам векторов и удалить элементы с одинаковыми индексами, используя функцию erase()
вектора. Однако, при каждой итерации мы изменяем размер векторов, поэтому мы применяем оператор + i
, чтобы указать корректный индекс для удаления.
2. С использованием итераторов:
for (auto it1 = vector1.begin(), it2 = vector2.begin(); it1 != vector1.end() && it2 != vector2.end();) { it1 = vector1.erase(it1); it2 = vector2.erase(it2); }
В этом случае мы используем итераторы, чтобы последовательно пройтись по элементам векторов и удалить элементы с одинаковыми индексами, используя функцию erase()
вектора. Мы используем два итератора it1
и it2
, чтобы отслеживать оба вектора одновременно. Обратите внимание, что операторы vector1.erase(it1)
и vector2.erase(it2)
возвращают новый итератор, указывающий на следующий элемент после удаления, поэтому мы присваиваем значениям итераторов эти новые значения.
3. С использованием алгоритма std::remove_if()
:
vector1.erase( std::remove_if(vector1.begin(), vector1.end(), [](const auto& element){ return <условие>; }), vector1.end() ); vector2.erase( std::remove_if(vector2.begin(), vector2.end(), [](const auto& element){ return <условие>; }), vector2.end() );
В зависимости от условия, которое вы хотите использовать для удаления элементов с одинаковыми индексами, вы должны вставить его в лямбда-функцию внутри std::remove_if()
. Это может быть проверка на равенство индексов (element.index == <индекс>
) или любое другое пользовательское условие. Обратите внимание, что после std::remove_if()
элементы, подлежащие удалению, перемещаются в конец вектора, и функция возвращает итератор, указывающий на новый конец вектора, который затем используется для корректного вызова erase()
.