Array sizeof()
-
Hallo,
Habe ein kleines Problem. Ich wollte durch einen meiner Arrays loopen und stellte folgendes fest:
int test[3] = {1, 2, 3}; cout << "Size of test is: " << sizeof(test) << endl << endl;Als Ausgabe bekam ich "12". Wieso ist denn mein Array 12 und wie kann ich so durch ihn durchloopen? :S
-
weil es 12 bytes groß ist und ein int ist 4 bytes groß.
int test[3] = {1, 2, 3}; cout << "Size of test is: " << sizeof(test)/sizeof(test[0]) << endl << endl;
-
Ohh
Also das sizeof() ist nicht die Grösse des Arrays (Elemente die es hat)?
Hmm, wie komme ich dann zur Anzahl Elemente die ein Array hat?
MfG
-
Hat volkard doch schon gepostet.
-
Ich hatte einen Fehler im Code, der ihn unlesbar machte. Jetzt gehts.
-
Ah, verstehe.
Dankeschön

-
Hab nochmals ne Frage, das etwa ins gleiche geht...
Ich möchte checken ob mein Array ein Element enthält, mit einem Vector würde ich das mit "binary_search()" machen.
Hab schon gegooglet, aber nicht herausgefunden, wie ich das mit nem Array machen kann.
-
Auch mit binary_search.
-
Bashar schrieb:
Auch mit binary_search.
Das gibt aber nen compiler error, der ziemlich lang ist o_O
int test[3] = {1, 2, 3}; if (binary_search(test[0], test[2], 2)) { cout << "true" << endl; } else { cout << "false" << endl; }Auch mit test.begin() und test.end() gings nicht :o
-
Du musst natürlich Iteratoren übergeben, beim Vektor übergibst du ja auch nicht die Elemente:
binary_search(test, test + sizeof(test)/sizeof(test[0]), 2)
-
bzw.
binary_search(&test[0], &test[3], 2)
-
Um deine wahrscheinlich nächste Frage auch gleich zu beantworten: Wenn du Arrays an Funktionen übergibst (als Zeiger auf das erste Element), geht die Grösseninformation verloren und
sizeofbringt dir nichts mehr. Gib in einem solchen Fall die Grösse als separaten Parameter mit, oder verwende - dazu würde ich dir ohnehin raten - gleich STL-Container. Wenn du die Dynamik nicht brauchst, wirf doch mal einen Blick aufstd::tr1::array(bzw.boost::array). Das ist sicherer und komfortabler als ein rohes Array, aber nicht langsamer.Für Algorithmen wie
std::binary_searchist www.cplusplus.com eine gute Referenz, dort sind meist entsprechende Anwendungsbeispiele zu finden.
-
Nexus schrieb:
Um deine wahrscheinlich nächste Frage auch gleich zu beantworten: Wenn du Arrays an Funktionen übergibst (als Zeiger auf das erste Element), geht die Grösseninformation verloren und
sizeofbringt dir nichts mehr. Gib in einem solchen Fall die Grösse als separaten Parameter mit, oder verwende - dazu würde ich dir ohnehin raten - gleich STL-Container. Wenn du die Dynamik nicht brauchst, wirf doch mal einen Blick aufstd::tr1::array(bzw.boost::array). Das ist sicherer und komfortabler als ein rohes Array, aber nicht langsamer.Für Algorithmen wie
std::binary_searchist www.cplusplus.com eine gute Referenz, dort sind meist entsprechende Anwendungsbeispiele zu finden.Super Referenz, danke!