Mehrdimensionales Vektor-Äquivalent?



  • Hallo,
    gibt es in der STL oder in boost etwas, mit dem man mehrdimensionale Datenstrukturen erzeugen kann?

    Sprich, etwas, womit man:

    vector<vector<color> > bitmap(width,clBlack);
    for (int i=0;i<width;i++)bitmap[i].resize(height,clBlack);
    

    durch das ersetzen kann:

    2d_matrix<color> bitmap(width,height,clBlack);
    


  • welchen nutzen hätte das? Du könntest kein push_back und ähnliches mehr ausführen, iterieren wäre auch nicht mehr intuitiv, da es bei mehrdimensionalen Matrizen eben verschiedene Iterationsmöglichkeiten gibt. Da bleiben nur noch wenige Dinge übrig, die man mit einem vector<vector<T> > aber genauso machen kann - mit kaum größerem schreibaufwand.


  • Mod

    Container von Container ist da schon der übiche Ansatz. Wenn dir das Interface nicht gefällt, kannst du ja eine eigene Schnittstellenklasse drumrumschreiben.

    Ansonsten kann ich noch boost.MultiArray in den Raum werfen. Boost ist zwar nicht Standard, aber so nahe dran wie eine externe bibliothek es nur sein kann.


  • Mod

    pumuckl schrieb:

    welchen nutzen hätte das? Du könntest kein push_back und ähnliches mehr ausführen, iterieren wäre auch nicht mehr intuitiv, da es bei mehrdimensionalen Matrizen eben verschiedene Iterationsmöglichkeiten gibt.

    Komisch, all das sind Argumente, die ich eher gegen Container in Containern angebracht hätte: Über einzelne Elemente kann man überhaupt nicht direkt iterieren und push_back fügt auch keine einzelnen Elemente ein (wo "hinten" bei zwei Dimensionen sein soll, wäre sowieso zu klären).



  • Athar schrieb:

    durch das ersetzen kann:

    2d_matrix<color> bitmap(width,height,clBlack);
    

    Schreib es dir doch selbst nimm was fertiges aus einem Tutorial! Auch finde ich es unschoen, eine Matrix auf std::vector< std::vector< ... > > abzubilden.


Log in to reply