2d array (vector*vector) schnell initialisieren
-
happystudent schrieb:
Ja dieser blöde Komma-Operator

Verwendet den überhaupt jemand außerhalb von for-Schleifen etc.?Bei eigenen Containern finde ich den ja auch ganz schick (vgl. boost::assign / eigen v3).
-
SeppJ schrieb:
Da du nicht der einzige bist, der in letzter Zeit eine falsche Vorstellung von 2D-Arrays hat:
http://www.c-plusplus.net/forum/p2422591#2422591Wenn du einer der dort vorgeschlagene Möglichkeiten benutzt (die letzte der drei scheint die passende zu sein), beschränkt sich das Nullen auf ein einzelnes fill. Und die ganze Struktur ist bei jeder Art von Zugriff wesentlich schneller als vector<vector>. Wieso muss das Feld eigentlich immer wieder neu mit Nullen überschrieben werden? Was hast du vor?
Wie kann man in deiner vorgschlagenen Klasse IntArray2D eine public Methode mit aufnehmen, die das Array sehr schnell initialisiert, z.B mit Nullen?
ich dachte an sowas in der Art:
class IntArray2D { vector<int> data; size_t length_y; public: void clr(void) { this->clear_vector(); } IntArray2D(size_t length_x, size_t length_y): data(length_x * length_y), length_y(length_y) { } int& get(size_t x_coord, y_coord) { return data[x_coord * length_y + y_coord];} void clear_vector(void) { memset(&data,0x0,sizeof(data)); } };
-
std::fill(data.begin(), data.end(), 0);?