J'ai compris pas de pb ;-) C'est vrai que ce que j'ai mis sur le post en lien est un peu hardcore pour quelqu'un qui débute, mais idéalement c'est comme ça que dans le futur tu devras programmer (enfin un style voisin je ne prétends pas avoir la science infuse ^^)
En fait soit tu reprends le code de la classe matrice que je t'ai filé et tu fais des :
matrix<bool> A;
Soit tu la retailles pour l'adapter spécialement aux booléens : tu vire les template <T>, tu changes tout les T dans le code par des bool et ca deviendra plus clair normalement :
class matrix{
protected:
std::vector<std::vector<bool> > data;
public:
/**
* \brief Constructeur par defaut
*/
matrix(){}
/**
* \brief Alloue en memoire une matrice
* \param nb_lig Nombre de ligne
* \param nb_col Nombre de colonne
*/
matrix(std::size_t nb_lig,std::size_t nb_col){
for(std::size_t lig=0;lig<nb_lig;++lig){
std::vector<bool> tmp;
tmp.reserve(nb_col);
for(std::size_t col=0;col<nb_col;++col){
tmp.push_back(0);//valeur par defaut
}
data.push_back(tmp);
}
}
...
/**
* \brief Accesseur vers un element de la matrice
* \param lig son numero de ligne
* \param col son numero de colonne
* \return la valeur stockee
*/
inline bool get(std::size_t lig,std::size_t col) const{
assert(lig<size1());
assert(col<size2());
return data[lig][col];
}
...
};
/**
* \brief Operateur << pour les matrices
* \param o Le flux de sortie
* \param m la matrice a ecrire
*/
std::ostream& operator << (std::ostream& o,const matrix & m){
for(std::size_t lig=0;lig<m.size1();++lig){
for(std::size_t col=0;col<m.size2();++col){
o<<m.get(lig,col)<<" ";
}
o<<std::endl;
}
return o;
}
...
Si tu utilises using namespace std; en début de fichier tu peux supprimer tous les std:: ce qui allègera le code (personnellement je n'aime pas trop les
using namespace donc bon... c'est d'ailleurs à proscrire dans les .h (.hpp) mais bref...)
Une fois que tu auras fait tout ça, vu ton code, il ne restera plus qu'à comprendre :
- la classe STL vector
- les références
Une vector c'est un tableau contigu en mémoire qui se comporte de manière assez semblable à un int tab[255] pour std::vector<int>, sauf que tu n'as plus à te préocupper de la taille grace au pusj_back (qui greffe un élément en fin de tableau). Cf :
http://www.sgi.com/tech/stl/Vector.html
Si les std::size_t te perturbent, tu peux les changer par des
unsigned int.
Les références : c'est presque la même chose qu'un pointeur, sauf que ça permet de manipuler syntaxiquement parler le paramètre comme s'il s'agissait de l'objet pointé directement. Exemple :
void incrementer1(int *p){ ++(*p);}
void incrementer2(int &p){ ++p;}
void incrementer3(int p){ ++p;}
int main(){
int p=0;
incrementer1(&p); //p==1
incrementer2(p); //p==2
incrementer3(p); //p==2 !!!
return 0;
}
En particulier, quand tu appelles une fonction, ses paramètres sont une copie (c'est pour ça que le incrementer3 ne marche pas. cf cours sur les ponteurs (=adresses) si quelque chose t'échappe, ou ballade toi dans le forum.
Passer un paramètre ni par référence ou par pointeru c'est donc mal, car s'il est gros il est très long à copier, alors qu'une référence est très rapide à copier ^^ Cependant lors d'un passage par référence il faut garantir la constance quand c'est possible (par exemple afficher une matrice ne la modifie pas) et c'est le rôle du
const.
Ainsi
incrementer(int const & i){++i;} //ne compile pas car i est modifié
Pour les méthodes (fonctions internse à une classe comme size1 dans le code que je t'ai filé) tu peux voir unconst qui n'est pas rattaché à un paramètre. Il correspond au const s'appliquant à
*this :
const matrix<int> m; //m ne doit pas varier on ne peut appeler que des methodes const dessus
m.size2() ; //ok
m.set(0,0,1); //pas ok
D'autres questions ? ;-)
Bonne chance
Je vais mettre un exercice d'un compain pour te montrer ce q'on peu utiliser:http://www.ulb.ac.be/di/info-f-101/Projets/05-06/projet3.cpp
Voila et je m'excuse mais je suis vraiment nul la dessus ms la j'ai vraiment pas le temps, il faut que je travaille pour payer mon kot et tout ca.J'avais prévu de bien étudier ca a noel car la je suis vraiment perdu et si on pourrais m'aider ca me fairait vraiment plaisir.Merci de me comprendre.