Cours de programmation et d'algoritmique

Si epsilon012 passe par là, il va pas être content... Il est contre les using namespace std si j'ai bien compris (en tout cas il supporte pas les miens)

Bon je vais pas reprendre point par point tous les trucs que tu racontes, parce ça n'aurait pas beaucoup d'intérêt. Mais juste rapidement : les namespaces ok ça pollue mon espace et c'est pas moral blablabla, mais honnêtement ça change quoi au programme final ? Tant que ça compile on s'en fout j'ai envie de dire. Surtout si ça rend le code source moins dégueulasse. Et quand ça crée des ambiguïtés ben on peut toujours forcer la spécification std::max par exemple.

Je n'ai pas bien compris ce que tu veux dire au niveau de la vitesse des disques durs. Oui je sais que c'est ça le facteur limitant, mais faudra qu'on m'explique pourquoi "cout" reste plus lent que "printf" alors que c'est censé faire la même chose ? (Enfin pour ceux qui disent que les performances sont les mêmes). Comme j'ai rarement besoin de dumper des gros fichiers texte je suis rarement embêté par les "performances" de cout ou printf, donc je connais pas trop cette affaire là.

Enfin les templates je dirais pas que j'ai de meilleurs solutions à proposer, c'est juste que j'aime pas ça. Car ça m'oblige souvent à faire des hacks pas jolis, et surtout à foutre la plupart de son code dans les header. Et ça c'est vraiment horrible. Tiens par exemple c'est pas évident non plus de faire une fonction qui lit un fichier, et qui en fonction de ce qui est lu produit un objet de type A ou B. On peut foutre le résultat dans un genre de QVariant, avec un indicateur qui dit si type() == A ou B, ou faire du dynamic cast, mais c'est moche quoi.

Ah et aussi un truc qui sera "corrigé" en C++0x : on peut pas créer de fonctions template avec arguments par défaut (juste des class template). Et quand j'ai voulu en faire évidemment je comprenais pas pourquoi le compilateur râlait. En comparaison Caml c'est tout beau tout joli tout propre, et pourtant je fais plus de C++ que de Caml en ce moment :p

Pour le 1er point, je dois dire que je n'utilise pas boost, donc je ne me sens pas concerné. Par contre j'ai souvent des vector de trucs dans mes programmes, entre autre trucs fournis par la std. Ou alors j'utilise Qt, mais là pas de pb de nom non plus parce que les structures s'appellent toutes QQuelquechose xD

Pis le coup de foutre du code dans les header, oui c'est nécessaire mais je trouve quand même que c'est moche et que ça pu. Au final on se retrouve avec la moitié de son code (template + fonction inline) dans les header, et le reste dans des .cpp. Franchement c'est quand même dommage.

Bon, après une longue absence, je reviens contredire tout ceux qui m'ont contredit ! :diable:

Artifère > Sauf que quelqu'un qui fait du C++ depuis un moment pourrait faire un petit effort.

alex3er > Le C avant le C++, c'est nul, ça enseigne le réflexe du printf ... Et pour les cours de dvpz, ils sont bons, mais je ne me souviens pas avoir vu grand chose d'intéressant pour les débutants débutants.

epsilon012 > Je n'ai jamais dit que le SdZ avait une bonne communauté.

Thomas > Les cours de C de france-ioi sont, si je me souviens ce que j'en avais pensé (c'est français cette phrase ?), à pente d'apprentissage raide et ne montant pas haut. Bref, les désavantages du SdZ avec l'accessibilité en moins.

delroth > Justement, la version C++ est certes plus verbeuse, mais surtout plus compréhensible - surtout avec un printf de 24 variables - qui est qui ?

TLN > Pour le using namespace, je préfère n'en mettre que lorsque je n'utilise que la STL, sinon ça m'emmêle avec les autres librairies, je préfère savoir quel identifiant appartient à quelle bibliothèque. Et les templates c'est tout simplement le plus beau du C++ ! 8D (Par contre, à déboguer, c'est ... Enfin, je ne finirai pas ma phrase.)

TLN > Les templates peuvent avoir un .cpp simulé par un .tpp avec à la fin du hpp #include "machin.tpp". Et dans le code ça change à peine de si c'était un .cpp. Et il y a aussi extern (mais il n'est pas présent partout, lui).

delroth > operator

TLN > Tu devrait essayer boost, c'est vraiment génial. =D

Delroth, le grammar nazi du printf.

Pis non Equinoxe j'ai pas franchement envie de me mettre à Boost. Pour ce que j'en ai vu je trouve pas ça très esthétique ni cohérent au niveau du nommage des fonctions.

@TLN 1) Oui, en utilisant une using declaration, on peut toujours faire std::max après, sauf qu'une using declaration peut introduire une surcharge (c'est d'ailleurs un de ses cas d'utilisation) et le code devient illisible (il faut regarder toutes les using declarations dans tous les scopes parents et connaitre tout les noms introduits… pas vraiment humain). Mais c'est sûr quand on utilise QT qui fait des define hasardeux sur tout et n'importe quoi, on peut se permettre un using namespace std.

@TLN 2)
--- demo.h ---
template\<typename T> class C{ void f(); };
#include "demo.kikoo"
--- demo.kikoo ---
template\<typename T>
void C\<T>::f(){}

Ça va là ? C'est bien séparé ?

@Equinoxe 3) Non mais tu dis qu'il y a des bon cours et moi je dis non et je rajoute que la communauté du site en est le résultat.

delroth > SetW = SetWeight = SetLargeur = la largeur complète. Et l'alignement à droite est également modifiable. L'i18n pour la monnaie est possible par std::locale. Et l'ordre des variables n'est pas si simple à changer dans le printf : il y a un ordre des paramètres. De toute façon, il y a certains cas où il vaut mieux utiliser std::cout (imho le plus souvent possible), et d'autres printf (imho uniquement quand c'est absolument nécessaire).

TLN > Quand tu utilises certaines fonctionnalités (boost.graph ? Désactivé à la finale, d'ailleurs. \^\^), tu es heureux. Enfin, je parle pour moi. ;)

delroth > Inutile de devenir aggressif, je ne faisais que donner mon avis (en provoquant un peu jaloyan, je l'admets, avec qui j'ai eu de longues, très longues discussions sur ce sujet depuis qu'on s'est rencontré l'année dernière et à chaque fois qu'on s'est croisés.)

epsilon012 > using namespace std; using namespace je_collisionns_std_sur_max; std::max(...); => Pas d'erreur. =)
Et pour la communauté c'est une agression directe sur ma personne, ça. Ca va se payer ! (Bon, j'y suis resté le temps d'avoir les bases pour ensuite aller ailleurs, mais la communauté du site n'est pas si mauvaises pour certains utilisateurs : lmghs et Laurent Gomila par hasard.)

Equinoxe 0 - Delroth 1
Je rajoute juste extensibilité pour cout…
template\<typename T>
faire42(const T& x){
std::cout \<\< x;
}

delroth > Ca m'apprendra à me relire ... En plus, traduire "weight" par "largeur" ... Honte sur moi ! Et tu ne dois pas considérer que tu as gagné (enfin, tu peux, mais pas considérer que j'ai perdu : je ne perds jamais. \^\^), parce que, comme dans mon message au-dessus, je dis que des fois il vaut mieux utiliser printf. Mais je te mets au défi de faire ça avec printf ! (un défi de chaque côté =p) :

1
2
3
template <typename Foo>
void bar(Foo const & baz) {
    std::cout }

Et, comme tu le dis si bien, boost.format le fait aussi bien, et c'est un standard.
Equinoxe 2 - Delroth 1. =p

epsilon012 > Je me suis fait powned ="( (et la prochaine fois je lirai tout au lieu de répondre au fur et à mesure. \^\^)

Pour la "standarditude" de boost, mea culpa, j'avais enregistré ça en regardant la documentation de quick_erase dans boost.unordered_map. J'avais oublié que c'était une implémentation du TR1.
Il n'empêche que son utilisation est de plus en plus fréquente (et donc de plus en plus standard).

Thomas > Oui ! =p

C'est quoi le rapport entre QT et C++ ? (The troll hit. The troll hit. You die.)

@Equinoxe : C'est faisable en fait…
template\<typename T>
void f(const T& x){
std::stringstream ss;
ss\<\<x;
std::printf("%s", ss.str().c_str());
}
std::stringstream c'est pas std::cout. :p

«

C'est quoi le rapport entre QT et C++ ? (The troll hit. The troll hit. You die.)

»
→ Euh ... le même qu'entre Boost et le C++ ?

Content d'avoir lancé un débat :)
Sinon, quel tuto dois/je suivre pour progresser en Programmation et en algorithme ? Celui du C du sdz est si incomplet que ça ? Si oui alors où :?

Répondre au sujet

Vous devez vous enregistrer ou vous connecter pour poster des messages.