IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Boost C++ Discussion :

classe avec membre matrix de taille 2*2


Sujet :

Boost C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 49
    Par défaut classe avec membre matrix de taille 2*2
    Bonjour!
    Voilà, j'ai une classe M, dont le seul membre est une matrix de boost. Ces matrices sont toujours de taille 2*2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class M{
    private:
    	boost::numeric::ublas::matrix<double> m_M;
    };
    J'aimerais pouvoir spécifier quelque part directement la taille de la matrix, histoire d'avoir un constructeur du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    M::M(){
    for (i=0;i<2;i++)
    for (j=0;j<2;j++)
    m_M(i,j) =0;
    }
    C'est à dire qu'en gros, à chaque fois que je crée un objet M, il faudrait qu'il sache déjà que la matrix de boost est de taille 2*2.

    Merci beaucoup par avance

  2. #2
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Bonjour,
    Euuu, as-tu jeté un coup d'oeil à la doc ?
    Le tout premier exemple est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int main () {
        using namespace boost::numeric::ublas;
        matrix<double> m (3, 3);
        for (unsigned i = 0; i < m.size1 (); ++ i)
            for (unsigned j = 0; j < m.size2 (); ++ j)
                m (i, j) = 3 * i + j;
        std::cout << m << std::endl;
    }
    Donc apparement, on peut fixer les dimensions d'une matrice dans son constructeur...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    M::M() : m_M(2,2)
    {
       for (i=0;i<2;i++)
       for (j=0;j<2;j++)
       m_M(i,j) =0;
    }

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Attention, la classe de boost n'a pas été crée avec des petites matrices de taille fixe en tête. En terme de performances, il y a probablement de bien meilleures solutions à considérer.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Un boost::array< <boost::array< double, N>, M > serait peut-être une meilleure représentation, au fait près qu'il faudrait réécrire toutes les routines de travail sur les matrices

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Oui on évite au moins l'allocation dynamique, mais je pensais à un truc comme les tinymatrix de blitz (mais le site web correspondant a l'air d'avoir été abandonné).
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 49
    Par défaut
    ->arzar: Merci bien pour ta réponse... Effectivement, ça m'était sorti de la tête qu'on pouvait écrire la chose comme ça... Désolé, mais je débute.

    -> Les autres: Merci pour le conseil des array, je vais l'utiliser, j'avais déjà réécris les fonctionnalité dont j'avais besoin, ça ne sera pas trop long!

    En fait, au début, je faisais un vector< vector<double> >, mais effectivement, ce n'est pas super performant!
    J'ai essayé aussi la solution tableau de tableau de double, mais c'était super compliqué de les passer en arguments à des fonctions. Il fallait faire des pointeurs de pointeurs, enfin, quelque chose qui me semblait être une usine à gaz!
    Donc, en résumé, la solution array <array <double> >vous paraît plutôt bonne?
    Pour tout dire, je fais plutôt des maths et écris un programme pour trianguler des surfaces. Les matrices en questions, ce sont les sommets des triangles que je construis, donc il va y en avoir beaucoup... (je représente les points par des matrices). je dirais entre 1000 et 10000 à chaque exécution du programme. Et je pense les stocker dans un vector.

    Suis ravis de tout commentaire!
    En tout cas, merci beaucoup pour ces messages, je ne trouve personne autour de moi pour passer 5 min à me répondre, et sur ce site, ça va tout seul, c'est formidable!

    PS: boost::array< <boost::array< double, N>, M > le N et le M correspondent bien à la taille de chacune des array, n'est-ce-pas?

Discussions similaires

  1. Classe avec membres const dans un vecteur
    Par PilloBuenaGente dans le forum Langage
    Réponses: 17
    Dernier message: 18/04/2013, 14h27
  2. Réponses: 20
    Dernier message: 06/02/2013, 00h17
  3. Pb avec membre d'une classe
    Par omdafer dans le forum Windows Forms
    Réponses: 17
    Dernier message: 26/05/2007, 20h44
  4. probleme compilation classe avec Borland c++ compiler 5.5
    Par softblue dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 17/06/2004, 15h16
  5. Objets/Classes avec un SGBD
    Par tiboleo dans le forum Décisions SGBD
    Réponses: 13
    Dernier message: 09/11/2003, 16h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo