C++ 2d std::vector easy definieren

T_55

Lieutenant
Registriert
Feb. 2013
Beiträge
643
Hallo,

mal eine blöde Frage, wie kann ich ein 2D Feld möglichst einfach als std::vector erstellen mit vordefinierten Feldgrößen?
Das Prinzip von Arrays scheint der debugger zwar zu schlucken aber wenn ich dann vec.size() oder vec[0].size() aufrufe gibts Fehler.
Code:
std::vector<std::vector<int>> vec [100][33];

Eine eher umständliche Lösung wäre dann wohl:
Code:
std::vector<std::vector<int>> vec;
vec.resize(100);
// und dann eine 100er Schleife für die 33 Felder der 2. Dimensionen...

Geht das auch einfacher oder muss die Schleifensache sein?

LG!
 
Code:
std::vector<std::vector<int>> vec(100, std::vector<int>(33, init_Value)

so :)
 
Code:
int num_of_col = 5;
int num_of_row = 9;
double init_value = 3.14;

vector< vector<double> > matrix;
//now we have an empty 2D-matrix of size (0,0). Resizing it with one single command:
matrix.resize( num_of col , vector<double>( num_of_row , init_value ) );
// and we are good to go ...
 
Oder ein einfachen vector mit columns * rows als Größe verwenden und den Index entsprechend umrechnen:

index = columns * row + column
 
Statt den etwas umständlichen Konstrukt mit verschaltelten std::vector-Dingern direkt zu benutzen, könntest du dir auch eine Klasse schreiben, die das ganze dann macht. Dann am besten auch nur mit einem internen Array (die Addressen lassen sich ja recht einfach von 2D auf 1D umrechnen, wenn die Dimensionen bekannt sind) - siehe Beitrag von kinglouy

Irgendwie sowas halt:

Code:
template<typename T>
class Matrix {

public:

  Matrix() { }
  Matrix(uint32_t rows, uint32_t cols)
  : _data(rows + cols, 0), _rows(rows), _cols(cols) { }
  
        T& at(uint32_t row, uint32_t col)       { return ...; }
  const T& at(uint32_t row, uint32_t col) const { return ...; }

private:

  std::vector<T> _data;
  
  uint32_t _rows = 0;
  uint32_t _cols = 0;

};
 
Zuletzt bearbeitet:
Je nach Groesse und Beschaffenheit deines Projekts ist Boost aeusserst empfehlenswert. In diesem Fall wohl Multi-Array
 
http://pastebin.com/raw/YtLw0Fvc

Hier ist meine kleine Matrix Klasse, die kannst du entsprechend auch als Vector3/Vector4 usw einsetzen wenn du das möchtest. Oder als beliebige 2D-Matrix.

Setzt C++11 voraus!
 

Ähnliche Themen

T
  • Gelöst
Antworten
3
Aufrufe
655
F
Antworten
2
Aufrufe
979
F
Zurück
Oben