TABLEAU 2D GENERIQUE MATRICE...

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 16 mai 2004 à 21:12
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 19 mai 2004 à 22:57
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/22840-tableau-2d-generique-matrice

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
19 mai 2004 à 22:57
ok merci, je vai aller voir
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
19 mai 2004 à 22:49
J'ai pas tout lu mais, ton code devrait se simplifier.
regarde la std::stack qui est sûrement un bonne exemple d'une utilisation d'une couche au dessus d'un vecteur
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
19 mai 2004 à 20:43
en fait le plus simple c'est de remplacer Type *values
par std::vector<Type> values; et ca va faire qd meme un surcouche de vector, mais ca sera toujours mieux puis que plus rapide, et ca simplifira

je dois me servir de fill_n, pour initialiser, et pour autre chose aussi?
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
19 mai 2004 à 09:34
Sinon pour le vecto, le fill_n rend le vector encore un peu plus rapide.


'Encapsuler' ? oui c'est une façon de le dire.On pourrait dire 'implémenter à l'aide' de aussi. Mais la POO est trop compliquée pour moi ;-)


PS :passée une certaine heure faut faire dodo :-)
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
19 mai 2004 à 00:32
ouai ba en fait ta raison, vector est plus rapide, meme si la c'est pas encore totalement optimiser je pense que vector est la meilleur solution

mais en fait ma classe va en quelque sorte encapsuler un vector?
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
18 mai 2004 à 23:54
ok merci c'est noté


pour me decider j'aurais voulu que vector soit plus rapide, enfin je vais continuer à faire des test
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
18 mai 2004 à 23:47
Juste ce changement pour la boucle du vector....je passe de 190 à 70

std::vector::size_type taille = v_tab.size();
for(std::vector::size_type i=0; i< taille; ++i )
{
v_tab[i]=5;
}

puis un simple -O3 sur g++ ramène les deux à 10.
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
18 mai 2004 à 23:34
vi, c'est pour ca que je poste

et aussi je vais rajouterune methode qui retourne le determinant, puis l'inverse de la matrice, mais si ta des idee n'hesite pas
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
18 mai 2004 à 23:31
Je vais regarder ça...

Sinon, tout le monde fait des erreurs [;)]
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
18 mai 2004 à 23:28
ben j'ai deja fait ca

#include
#include <vector>
#include <ctime>

#include "Array2D.h"


int main()
{
const std::size_t SIZE=1000000;
unsigned beg, end;

std::vector v_tab(SIZE);
Array2D a_tab(SIZE,1);

beg=std::clock();
for(std::vector::size_type i=0; i<v_tab.size(); i++)
{
v_tab[i]=5;
}
end=std::clock()-beg;
std::cout << end << '\n';

beg=std::clock();
for(std::size_t i=0; i<a_tab.size(); i++)
{
a_tab[i]=5;
}
end=std::clock()-beg;
std::cout << end << '\n';

std::cout.flush();
std::cin.get();
}

resultat j'obtient 190 pour vector et 20 pour Array2D ??
je doit mal m'y prendre ? ca me paraity enorme comme difference, je vois pas comment vector pourrait etre aussi lent ?

si tu regarde le source hesitee pas a me dire si ya des erreurs, je repete c'est tout a fait possible
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
18 mai 2004 à 23:17
oui sûrement, tu devrais poster les tests pour faire des tests de performance, je les effectuerai chez moi avec plusieurs compilo et on pourra comparer le rapport performance/temps de codage.
J'ai déjà télécharger ta source que je regarderai demain sous linux.
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
18 mai 2004 à 23:13
eu oui avec la stl de vc++6.0, remarque pour le moment je dev sous vc++6.0 mias je compte passer a dev c++
(j'ai test cette classe sous devc++, mais j'ai pas encore comparer avec vector..) tu pense que ca sera plu rapide avec vector?
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
18 mai 2004 à 23:07
50% ? avec la STL de Visual C++ 6.0 ?
Ca compte pas si oui, il faut en utiliser une autre que cette erreur de programmation.
Je ferais des essais pour voir avec la code que tu avais poster déjà sur un sujet similaire je crois.
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
18 mai 2004 à 23:04
optimiser sans doute, j'avait deja fait des test sur un tableau 1 dimension de quelque millier d'element et j'etais quand meme 50% plus rapide

cette classe est souple, on peut l'utiliser aussi bien comme un tableau ou comme une matrice, pour matrice je sais pas encore mais ca peut aller de 3x3, 4x4 à beaucoup plus (je me reserve cette possibilité
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
18 mai 2004 à 22:56
Sur quelle taille de matrice comptes tu utiliser ta matrice, en général vector est optimisé et fonctionnement très bien pour des tailles raisonnables quand même.
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
18 mai 2004 à 22:53
pour l'instant c'est provisoir, mais au finale je n'utiliserait pas vector, au niveau performance yorai une perte
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
18 mai 2004 à 22:39
Salut,
pourquoi ( ou as-tu esssayé ) n'utilises-tu pas un simple vector pour insérer les éléments de ton tableau ?
Ta matrice n'étant plus qu'une couche une dessus du vecteur pour accèder au vecteur grâce aux deux dimensions ?
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
16 mai 2004 à 21:16
redefinition constructeur par defaut, constructeur par copie et operateur =, c'est benin mais malheuresement on c'est souvent oublié
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
16 mai 2004 à 21:12
qu'est ce que tu entends par 'canonique'?
Rejoignez-nous