Как и почему я могу переписать этот кусок кода, используя find_if - PullRequest
0 голосов
/ 03 мая 2020

Я не могу понять, как мне переписать этот кусок кода, используя find_if, я также хотел бы услышать, есть ли какие-либо преимущества в этом

const Movie& MovieRepo::find(const string& title,const string& genre,const string& star,const int year) const {
    for (const auto& m : all) {
        if (m.getTitle() == title && m.getGenre() == genre && m.getStar() == star && m.getYear() == year) {
            return m;
        }
    }
    throw MovieRepoException("Error find");
}

1 Ответ

0 голосов
/ 03 мая 2020

Вот как:

const Movie& MovieRepo::find(const string& title,const string& genre,
                             const string& star,const int year) const {
  auto it = std::find_if(std::cbegin(all), std::cend(all),
    [&](const Movie& m) {
      return m.getTitle() == title && m.getGenre() == genre &&
             m.getStar() == star && m.getYear() == year;
    });
  if (it != std::cend(all)) return *it;
  throw MovieRepoException("Error find");
}

Что касается того, почему - лично я считаю, что явное l oop прекрасно, его легче читать.

...