Вы должны протестировать автомобиль, поэтому вы должны передать его в тестовую функцию.
Таким образом, вызов test
должен быть внутри вашего l oop, а не снаружи, и вы проходите разыменованный итератор к нему. Т.е.
for (auto it = m_vehicles.begin(); it != m_vehicles.end(); ++it)
if (test(*it)) // perform the test on a vehicle
vehicles.push_back(*it);
Диапазон на основе l oop может быть немного проще для понимания
for (auto vp : m_vehicles)
if (test(vp)) // perform the test on a vehicle
vehicles.push_back(vp);
Или используйте std::copy_if
, как предложено в комментариях выше.