Обычно используется идиома удаления / удаления, которая выглядит примерно так:
myvector.erase(std::remove(myvector.begin(), myvector.end(), 4), myvector.end());
Редактировать: Перечитывая свой вопрос, вы упоминаете «определенные критерии».Если критерии не обязательно просто удаляют одно значение, вы можете использовать std::remove_if
вместо std::remove
и указать свои критерии в функторе.
Edit2: для версии, имеющей четыре вектора, обычный метод заключается в создании структуры, содержащей четыре связанных значения, и удалении целых структур:
struct x4 {
int a, b, c, d;
// define equality based on the key field:
bool operator==(x4 const &other) { return a == other.a; }
x4(int a_, int b_=0, int c_=0, ind d_=0) : a(a_), b(b_), c(c_), d(d_) {}
};
std::vector<x4> myvector;
myvector.erase(std::remove(myvector.begin(), myvector.end(), x4(4));
Опять же, если ваши критерии более сложные, чем вы можете легко выразить в операторе сравнения, вы можете использовать std::remove_if
вместо std::remove
.Это также полезно, если / когда вам может понадобиться применять разные критерии в разное время.
Если вам действительно нужно , чтобы хранить ваши данные в параллельных векторах (например, вы подаете данныек чему-то внешнему, что требует отдельных смежных массивов), тогда использование цикла, вероятно, так же хорошо, как альтернативы.