2016-04-08 8 views
-2

Ich mag Klasse erstellen, indem die generische Programmierung mit der Anweisung unterWie kann ich Klasse für 2 Dimensional Array erstellen?

matrix<int, 2, 2> tonpai = { { 1,2 },{ 3,4 } }; 

Danke zu unterstützen. // Ich versuche das zu tun, aber ich weiß nicht, welches Argument von Konstruktor sein sollte. Entschuldigung für mein Englisch. Das ist meine erste Frage.

+0

Ist dies eine akademische Übung zu verstehen, wie dies zu tun, oder weil Sie brauchen ein Werkzeug, das es tut? – tadman

+0

Wie wäre es mit einem ['std :: array'] (http://en.cppreference.com/w/cpp/container/array) von [' std: array'] (http://en.cppreference.com/ w/cpp/container/array)? –

+0

Ja, ich versuche diese Übung zu machen, aber ich weiß nicht, welches Argument des Konstruktors sein sollte. – BeginTP

Antwort

1

Ich rate Ihre Frage ist eigentlich darüber, wie Sie Ihre Klasse Konstruktor diese Art von Initialisierungsliste akzeptieren. Die Kommentatoren scheinen jedoch zu denken, dass Sie fragen, wie Sie eine Matrix-Klasse implementieren.

Nur für den Fall, dass ich recht habe, hier ist ein Beispiel für die Konstruktion aus einer Initialisierungsliste.

Aber wenn ich falsch liege, bedenken Sie, dass die Implementierung eines Arrays in diesem Beispiel schlecht ist und Sie es nicht verwenden möchten. Ich habe mich für ein C-Style-Array entschieden, weil es einfach einzurichten ist und die Leute mit ihrer Arbeitsweise vertraut sind.

Auch diese Initialisierung wird außerhalb der Grenzen des Arrays schreiben, wenn die Liste zu viele Elemente enthält, also denken Sie daran für Ihre Klasse.

Und ich nehme auch an, dass es Ihnen egal ist, Ihren Konstruktor constexpr zu behalten.

Also hier ist es, ein Beispiel für einen Konstruktor einer 2-verschachtelte Initialisiererliste zu akzeptieren, nur dass ...:

#include <initializer_list> 
#include <iostream> 

template <typename T, int row_count, int col_count> 
class matrix { 
    T carray[row_count][col_count]; 
public: 
    matrix(std::initializer_list< std::initializer_list<T> > init_list) { 
     int rowidx=0; 
     for(const auto& row : init_list) { 
      int colidx=0; 
      for(const auto& elem : row) { 
       carray[rowidx][colidx++] = elem; 
      } 
      ++rowidx; 
     } 
    } 

    void Print() const { 
     for(const auto& row : carray) { 
      for(const T& elem : row) { 
       std::cout << elem << " "; 
      } 
      std::cout << '\n'; 
     } 
    } 
}; 


int main() { 
    matrix<int, 2, 2> tonpai = { { 1,2 }, { 3,4 } }; 
    tonpai.Print(); 
} 
+0

Das ist nett. Gut gemacht! –

+0

Danke! (Glaubst du, dass er danach fragt? Ich wollte seinen Käse nicht im Wind lassen, wenn das so ist). –

+1

tue ich. (_ "Ich weiß nicht, welches Argument des Konstruktors sein sollte" _) –

Verwandte Themen