2015-06-04 3 views
0

Я пытаюсь реализовать операцию фильтра, которая принимает вектор V и создает другой вектор D с фильтрованными элементами из V. Результат не может быть указателем, и мне не разрешено используйте регулярный цикл/while. Я думал использовать: for_each, copy, copy_if, но никто, похоже, не работает.Работа фильтра от вектора к вектору

vector<Car> fin; 
    vector<Car> all(repo->getAll()); 
    for_each(all.begin(), all.end(), [=](Car& cc) { 
      if (cc.getModel() == model) { 
       Car c(cc.getNumber(),cc.getModel(),cc.getCategory()); 
       fin.push_back(c); 
      } 

Это даст мне ошибку при выполнении push_back.

copy_if(all.begin(), all.end(),fin.begin(), 
       [&](const Car& cc) { if (cc.getModel()==model) return cc; }); 

Это будет идти в библиотеке итератора и дать мне ошибки вместе с «Условным выражением типа сопзЬ автомобиля является незаконным»

Есть ли способ, чтобы сделать копии элементов мне нужно от одного вектора и добавить их в другую внутри цикла?

Я попытался, если (find_if (...) на той же идее, с лямбда и пытается создать новый автомобиль и в конце концов, добавить его к моему D вектор, но это не сработало

Полный corected функция фильтра:

vector<Car> Controller::filterByCategory(string category) { 
    vector<Car> fin; 
    vector<Car> all(repo->getAll()); 

    copy_if(all.begin(), all.end(),fin.begin(), 
       [&](Car& cc) { return (cc.getCategory()==category); }); 
    return fin; 
} 
+0

'Это даст мне ошибку при выполнении push_back.' Я рекомендую прочитать сообщение об ошибке. – user2079303

+0

Сообщение об ошибке, которое вы отправили, полностью не связано с вашей исходной проблемой. Задайте еще один вопрос. –

ответ

4

Это будет идти в библиотеке итератора и дать мне ошибки вместе с «Условным выражением типа сопзЬ автомобиля является незаконной»

Ожидается, что ваша функция лямбда возвращает логическое значение, а не объект. Измените его на

copy_if(all.begin(), all.end(),fin.begin(), 
       [&](const Car& cc) { 
        return (cc.getModel()==model); }); 

Это предназначено для использования в качестве условия по copy_if() если элемент из входного диапазона должен быть скопирован в результате или нет.

+0

Он запустил мою программу, но как только я вызываю эту функцию, программа вылетает. Я поставлю полный код в сообщении – Charlotte45

0

for_each также будет работать, если вы используете [&] в выражении лямбда, а также создадите конструктор копирования в своем классе Car.

Смежные вопросы