Как удалить элементы векторов по одинаковому индексу С++?

В 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().