функция конструктора для матрицы 3х3 (C ++) - PullRequest
1 голос
/ 10 апреля 2020

Мне нужно написать конструкторы для моего класса матрицы 3х3. Я не уверен, что я делаю это эффективно, и я не знаю, как использовать initializer_list .. Я хотел бы конструктор, который создает по умолчанию матрицу тождественности и получает параметры для установки диагональной матрицы. Тогда я также хотел бы конструктор, который берет список факторов (с initialization_list) и помещает их в матрицу. Вот что у меня есть:

#include <iostream>
#include <array>
#include <cmath>
#include <initializer_list>
#include "Vecteur.h"
using namespace std;

   class Matrice33 {


private :

   array<array<double,3>,3> matrice;

   public :

       Matrice33(double a = 1, double b=1, double c=1)

        { matrice[0][0] = a; matrice[1][1]= b; matrice [2][2]= c;
          matrice[0][1] = 0; matrice[0][2] = 0; 
          matrice[1][0] = 0; matrice[1][2] = 0;
          matrice[2][0] = 0; matrice[2][1] = 0;} \\ IS THIS THE ONLY WAY TO SET THE MATRIX OR IS 
                                                  \\THERE A QUICKER ONE?



      Matrice33(initilizer_liste<double> cosnt& coeff)

        { for( auto c : coeff) \\ I DON'T KNOW HOW TO WRITE THIS CONSTRUCTOR...



    void affiche() const { for(auto m : matrice){
                              for(auto n : m) {
                                  cout<<n<<" ";}
                                 cout<<endl;}}

      }; 

   int main(){

    Matrice33 mat(1.1, 1.2, 1.3,
                  2.1, 2.2, 2.3,
                  3.1, 3.2, 3.3); \\I'D LIKE THIS TO BE TAKEN AS THE LIST BY MY CONSTRUCTOR, FOR 
                                   \\EXAMPLE

      Matrice33 m(2.0,3.0,1.0);
      m.affiche(); \\ WHEN I EXECUTE I DON'T GET ANY OUTPUT.. 
        return 0;
           }

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

Это измененная версия вашего кода, которая только работает.

#include <iostream>
#include <array>
#include <cmath>
#include <initializer_list>
#include <vector>

using namespace std;

class Matrice33
{
public:

   Matrice33(double a = 1, double b = 1, double c = 1)
      : matrice{{ {{a, 0, 0}}, {{0, b, 0}}, {{0, 0, c}} }}
   {
   }

   Matrice33(const std::initializer_list<std::initializer_list<double>> & coeff)
   {
      int counter = 0;
      for (auto row : coeff)
      {
         copy(row.begin(), row.end(), matrice[counter++].begin());
      }
   }

   void affiche()
   {
      for (int i = 0; i < 3; i++)
      {
         for (int j = 0; j < 3; j++)
         {
            cout << matrice[i][j] << " ";
         }
         cout << endl;;
      }
   }

private:
   array<array<double, 3>, 3> matrice;
};

int main() 
{

   Matrice33 mat{ {1.1, 1.2, 1.3},{2.1, 2.2, 2.3},{3.1, 3.2, 3.3} };
   mat.affiche(); 

   Matrice33 m(2.0, 3.0, 1.0);
   m.affiche(); 

   return 0;
}
0 голосов
/ 10 апреля 2020

Здесь вы можете использовать совершенную пересылку и конструктор шаблона.

template<typename... Args>
Matrice33(Args&&... args) : matrice(std::forward<Args>(args)...) {}

, тогда инициализация будет такой же, как и инициализация std :: array.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...