Stringanzahl eines Stringarrays
-
Hallo zusammen!
Ich habe folgendes Problem. Ich habe ein Array aus Strings (std::string keine C-Strings) und möchte die Anzahl dieser in dem Array herausfinden. Für C-Strings wüsste ich eine Lösung, allerdings fällt mir bei std::string's so banal die Lösung wahrscheinlich auch sein wird keine Lösung ein.
Danke im voraus für die Hilfe
-
Wenn du nur einen Zeiger auf das Array hast, gar nicht.
Ansonsten:
template <typename T, int N> int array_size(T (&a) [N]) { return N; }
-
Sorry, aber ich habe mit Templates noch nie gearbeitet.
Kannst du mir evtl. eine kleine Erklärung zu dem Codeschnipsel geben?
Danke

-
Naja, es gibt die Größe
Neines ArraysT[ N ]zurück ^^alternativ:
sizeof( array ) / sizeof( array[ 0 ] )
-
daispro schrieb:
Hallo zusammen!
Ich habe folgendes Problem. Ich habe ein Array aus Strings (std::string keine C-Strings) und möchte die Anzahl dieser in dem Array herausfinden. Für C-Strings wüsste ich eine Lösung, allerdings fällt mir bei std::string's so banal die Lösung wahrscheinlich auch sein wird keine Lösung ein.
Danke im voraus für die Hilfe
Wie legst Du das Array an?
-
Okay, lassen wir mal den Parameter T weg, dann haben wir:
template <int N> int array_size(std::string (&a) [N]) { return N; }Templates sind ganz einfach Vorlagen für Funktionen. (Gibts natürlich auch für Klassen, aber hier eine Funktion) Wenn du ein Array mit 3 Elementen namens "myarray" hast, kannst du diese Funktion so aufrufen:
array_size<3>(myarray); // gibt 3 zurückDer Compiler weiß aber natürlich, dass das Array 3 Elemente hat und ist so schlau, dass du ihm das nicht mehr hinschreiben musst (Man sagt, er kann den Template-Parameter "deduzieren".)
Der Compiler sieht also, der Funktionsaufruf würde mit N = 3 funktionieren und erzeugt eine passende Funktion, die schlussendlich so aussieht:
int array_size(std::string (&a) [3]) { return 3; }Allerdings solltest du rohe Arrays in C++ nicht verwenden, es sei denn, du hast einen guten Grund dafür.