Problème avec le conteneur vector
Bonsoir, je désire créé un petit programme en C++ permettant de gérer des matrices mathématiques dans le but de le fournir à mon IUT pour qu'on puisse éventuellement en faire une sorte de dossier pédagogique.
Les classes Matrix et Lignes ont été implémentées et fonctionnent parfaitement.
Le problème intervient dans la partie user. En effet pour contenir toutes les matrices que l'user aura créé durant la session, j'utilise un vecteur (à titre pédagogique encore une fois), mais le soucis vient de la fonction push_back(), elle semble modifier les attributs des matrices que je lui envoie, pas toujours, mais souvent :
Exemple :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| vector<Matrix> vecMatrices;
Matrix mat(1,1); // Création d'une matrice de 1 ligne et de 1 colonne.
Matrix mat1(1,1);
Matrix mat2(1,1);
mat.setLigne(1, "1"); // A la ligne 1, la matrice a pour valeur : 1.
mat1.setLigne(1, "2"); // A la ligne 1, la matrice a pour valeur : 2.
mat2.setLigne(1, "3");
mat.afficher();
mat1.afficher();
mat2.afficher();
cout << "A" << endl; // Cette lettre permettra de bien distinguer les affichages.
vecMatrices.push_back(mat); // Ajout des matrices.
vecMatrices.push_back(mat1);
vecMatrices.push_back(mat2);
for(vector<Matrix>::const_iterator it = vecMatrices.begin() ; it < vecMatrices.end() ; it++)
{
(*it).afficher();
}
cout << "B" << endl; // Idem |
Affichage console :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 1
2
3
A
1.49838e-038
1.49838e-038
3
B |
Voilà, on peut émettre une hypothèse comme quoi ce seraient les constructeurs de copies des classes qui seraient responsables de ce problème, je vous les donne au cas où le problème viendrait de là :
Code:
1 2 3 4 5 6 7 8 9 10 11
| Matrix::Matrix(const Matrix &matrix)
{
m_lignes = new Ligne[matrix.m_nbLignes];
m_nbChiffresColonnes = new unsigned int[matrix.m_nbColonnes];
m_nbLignes = matrix.m_nbLignes;
m_nbColonnes = matrix.m_nbColonnes;
for(unsigned int i = 0 ; i < m_nbLignes ; i++) m_lignes[i] = matrix.m_lignes[i];
for(unsigned int i = 0 ; i < m_nbColonnes ; i++) m_nbChiffresColonnes[i] = matrix.m_nbChiffresColonnes[i];
} |
Code:
1 2 3 4 5 6 7 8 9 10 11
| Ligne::Ligne(const Ligne &L) : m_nbValeur(L.m_nbValeur)
{
m_cellules = new float[m_nbValeur];
for(unsigned int i = 0 ; i < m_nbValeur ; i++)
{
m_cellules[i] = L.m_cellules[i];
cout << "1 " << m_cellules[i];
cout << "2 " << L.m_cellules[i];
}
} |
Merci beaucoup !!! :D
EDIT :
Cela me semblerait étonnant que cela soit dû aux constructeur de copies, je viens de faire un test et pourtant cela fonctionne très bien :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| vector<Matrix> vecMatrices;
Matrix mat(3,3);
mat.setLigne(1, "1,2,3");
mat.setLigne(2, "-1,-3,-5");
mat.setLigne(3, "1.2,0.66,-0.2");
Matrix mat1(mat);
mat.afficher();
mat1.afficher(); |
Affichage console :
Code:
1 2 3 4 5 6 7
| 1 2 3
-1 -3 -5
1.2 0.66 -0.2
1 2 3
-1 -3 -5
1.2 0.66 -0.2 |