Einige Beobachtungen, die ich hoffe hilfreich (aber sei vorsichtig: der folgende Code ist nicht getestet).
Wenn Ihr Passenger
Vornamen, Nachname und Ziel benötigen, nehme ich an, dass es einen Passenger
Konstruktor mit drei String-Parametern gibt.
Ich nehme an, dass Ihre Read_from_file()
so etwas wie
void read_from_file(list<Passenger> & flist, string const & filename)
{
string firstN, lastN, dest;
ifstream input(filename.c_str());
while (input >> firstN >> lastN >> dest)
{
flist.push_back(Passenger(firstN, lastN, dest)); // for C++98
// flist.emplace_back(fistN, lastN, dest); // for C++11/14
}
// input.close(); no need for close: file closed by destructor
}
Vorschlag werden soll: pass Parameter Bezug genommen wird, und unter Verwendung von const
, wenn möglich.
Auch die insert()
kann auf einfache Weise angepasst werden (in zwei verschiedenen Modi, je nachdem, ob Sie einen aktuellen C++ Compiler oder pre C++ 11 verwenden)
void insert(list<Passenger> & flist, string const & firstN,
string const & lastN, string const & dest)
{
flist.push_back(Passenger(firsN, lastN, dest)); // C++98 version
// flist.emplace_back(firsN, lastN, dest); // C++11/14 version
}
Weniger offensichtlich, wie man check_reservation()
. Und wirklich abhängig von der C++ 98/C++ 11 Frage.
Ich nehme an, dass Sie eine check_reservation()
möchten, die einen Passenger
geben Vorname, Nachname und Ziel finden möchten.
In C++ 11 ist ziemlich einfach (angenommen Ihre Passenger
enthält eine firsN
, ein lastN
und ein dest
Mitglied)
bool check_reservation(list<Passenger> const & flist, string const & firstN,
string const & lastN, string const & dest)
{
return flist.cend() != find_if(flist.cbegin(), flist.cend(),
[&](Passenger const & p)
(return (fistN == p.fistN)
&& (lastN == p.lastN)
&& (dest == p.dest);));
}
In C++ 98 Sie Lambda-Funktionen haben nicht so komplizierter ist . Sie müssen einen Funktor zum Vergleich konstruieren; so etwas wie
struct person_eq : std::unary_function <Passenger, bool>
{
string const & f;
string const & l;
string const & d;
person_eq (string const & f0, string const & l0, string const & d0)
: f(f0), l(l0), d(d0)
{}
bool operator() (Passenger const & p) const
{ return (p.firstN == f) && (p.lastN == l) && (p.dest == d); }
};
und Ihre check_reservation()
sollte so etwas wie
bool check_reservation(list<Passenger> const & flist, string const & firstN,
string const & lastN, string const & dest)
{
return flist.cend() != find_if(flist.cbegin(), flist.cend(),
person_eq(fistN, lastN, dest));
}
Ich wiederhole geworden: dieser Code nicht getestet ist, so vorsichtig sein.
ps.entschuldigung für mein schlechtes Englisch.
bearbeiten
Leider, wenn es die operator==
für Ihre Passenger
definiert ist, kann Ihr check_reservation()
wirklich
bool check_reservation(list<Passenger> const & flist, string const & firstN,
string const & lastN, string const & dest)
{
return flist.cend() != find(flist.cbegin(), flist.cend(),
Passenger(firstN, lastN, dest));
}
Sie können prüfen, diese Frage stellen an: http://programmers.stackexchange.com/ –