Ich habe eine Klasse namens Writer
, die eine Funktion writeVector
wie folgt hat:
void Drawer::writeVector(vector<T> vec, bool index=true)
{
for (unsigned int i = 0; i < vec.size(); i++) {
if (index) {
cout << i << "\t";
}
cout << vec[i] << "\n";
}
}
Ich versuche, keinen doppelten Code zu haben, während ich mir immer noch Sorgen um die Leistung mache. In der Funktion if (index)
überprüfe ich jede Runde meiner for
Schleife, obwohl das Ergebnis immer das gleiche ist. Dies ist gegen "Sorgen um die Leistung".
Ich könnte dies leicht vermeiden, indem ich den Scheck außerhalb meiner for
Schleife platziere. Ich werde jedoch jede Menge doppelten Codes erhalten:
void Drawer::writeVector(...)
{
if (index) {
for (...) {
cout << i << "\t" << vec[i] << "\n";
}
}
else {
for (...) {
cout << vec[i] << "\n";
}
}
}
Das sind also beide "schlechte" Lösungen für mich. Was ich gedacht habe, sind zwei private Funktionen, von denen eine den Index verlässt und dann die andere aufruft. Der andere übertrifft nur den Wert. Ich kann jedoch nicht herausfinden, wie ich es mit meinem Programm verwenden soll. Ich würde immer noch die if
Prüfung benötigen, um zu sehen, welches ich aufrufen soll ...
Entsprechend dem Problem scheint Polymorphismus eine richtige Lösung zu sein. Aber ich kann nicht sehen, wie ich es hier verwenden soll. Was wäre der bevorzugte Weg, um diese Art von Problem zu lösen?
Dies ist kein richtiges Programm, ich bin nur daran interessiert zu lernen, wie diese Art von Problem gelöst werden sollte.