Problem: Überladen Sie den Standardoperator <<
für eine vector<int> v
Variable, so dass cout << v
jedes Element sequenziell druckt. Hier habe ich eine Option sah wie von Jason Iverson in der previous question vorgeschlagenC++ Überladen des Operators mit/ohne Definieren einer Vorlage
template<typename T>
std::ostream& operator<<(std::ostream& s, std::vector<T> t) {
s << "[";
for (std::size_t i = 0; i < t.size(); i++) {
s << t[i] << (i == t.size() - 1 ? "" : ",");
}
return s << "]" << std::endl;
}
Das sollte natürlich für jede Art von Elementen arbeiten, aber da ich nur besorgt bin mit int
, vereinfachte ich die Funktion als
ostream& operator << (ostream &os, const vector<int> &v){
for (auto x: v){
os << " " << x;
}
return os;
}
Es funktioniert einfach gut.
Also meine Frage
ist- Soweit
vector<int> v
betroffen ist, was ist der Nachteil von nichttemplate
verwenden? - Abgesehen von der allgemeinen Zweckbestimmung, was ist der Vorteil von Jasons Lösung?
Vielen Dank!
Deeper Gedanken: Die obige Frage war schlecht formuliert, und dank den Kommentaren, ich glaube, es ist sinnvoll, es neu zu formulieren macht. Frage: in C++, Was kostet die Verwendung von template
wo eine Single-Type-Funktion ist genug?
Credits @Marco A und @Walter könnte diese Frage geschlossen werden.
Wissen Sie, was eine 'Schablone' ist? Wenn ja, warum fragst du, wenn nicht, geh und lerne darüber. – Walter
Welchen Vorteil hat dann der allgemeine Zweck/die Überlastungen nicht selbst schreiben zu müssen? – NathanOliver
@Walter Ich kenne 'template', möchte aber seinen Vorteil verstehen, abgesehen davon, dass es allgemeiner ist, indem ich den Typ' T' nicht spezifiziere. – wenduowang