2d vector oder 2d array
-
Hallo,
ich müsste ein ascii bildchen in einem 2d Array (dynamisch) speichern....mein erster gedanke wäre gewesen ein zweidimensionales array zu verwenden
char** bild;würde sowas aber auch mit std::vector gehn?
wie macht man denn das?
nagut irgendwie:
vector<vector<char> > img;wie greif ich nun zum beispiel aufs zeichen an [0][0] oder sonst irgendwo zu ?
bzw wie greif ich generell schreibend/lesend drauf zu ?lg
-
Bei einem verschachtelten vector denke ich sollte
img[0][0]
funktionieren.
Aber bei einem Bild bist Du mit einem unsigned char array besser bedient.
Gut Schuß
VuuRWerK
-
Vielleicht hilft dir ein kurzes Anwendungsbeispiel schon weiter:
//main.cpp #include <iostream> #include <vector> int main() { std::vector< std::vector<int> > werte; // Vectoren füllen for(int zeilen = 0; zeilen != 3; ++zeilen) { // Vector der Integerelemente enthält hinzufügen werte.push_back(std::vector<int>()); for(int spalten = 0; spalten != 3; ++spalten) { // Über reverse_iterator auf das zuletzt hinzugefügte Element des "äußeren" Vectors zugreifen // und dadurch einen Integerwert zum "inneren" Vector hinzufügen werte.rbegin()->push_back(zeilen + spalten); } } // Ausgabe aller Werte // Variante 1: Indexoperator std::cout << "Ausgabe per Indexoperator:" << std::endl; for(std::vector< std::vector<int> >::size_type zeile = 0; zeile != werte.size(); ++zeile) { for(std::vector<int>::size_type spalte = 0; spalte != werte[zeile].size(); ++spalte) { std::cout << werte[zeile][spalte] << " "; } std::cout << std::endl; } // Variante 2: Iteratoren std::cout << "\nAusgabe per Iteratoren:" << std::endl; for(std::vector< std::vector<int> >::iterator outer = werte.begin(); outer != werte.end(); ++outer) { for(std::vector<int>::iterator inner = outer->begin(); inner != outer->end(); ++inner) { std::cout << *inner << " "; } std::cout << std::endl; } return 0; }
Natürlich hätte man das ein oder andere typedef noch mit reinwurschteln können, aber wie gesagt es soll ja nur ein kurzes Beispiel sein :).
-
min Problem konkret:
also data ist ein vecotr mit zeichen.
img_data ist so deklariert uint8_t** imgdata;
jetzt will ich eben dass das ganze von
data auf img_data in 2d umgemappt wird
aber irgendwie spukt er mir da das falsche zeichen dann aus.....sieht irgendwer den fehler?
hier ist mein code/*Dynamische Array von Zeigern anlegen*/ img_data = new uint8_t*[width]; /*An jeden Zeiger ein Array hängen*/ for (int i = 0; i < width; i++) { img_data[i] = new uint8_t[height]; } /*pixel auf 2d ummappen*/ int x = 0; //x-achse int y = 0; //y-achse for(int k = 0; k< data.size(); k++) { img_data[x][y] = data[k]; if(k % width == 0) {x++; y=0;} else y++; } cout << img_data[0][1];