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

C++ Discussion :

Pourquoi la communauté C++ s'intéresse plus à la technique et ignore la conception?


Sujet :

C++

  1. #821
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    Je ne peux que rejoindre koala sur ce point.

    L'algorithmique matheux, c'est bien, mais c'est souvent impossible à implémenter dans un logiciel informatique où tout espace et vitesse est restreint, toujours finit.

    Souvent, l'algorithmie matheux parvient à trouver une solution programmables à des problèmes bien précis qui ne sont qu'un modèle restreint du problème réel, et ceux qui essaient de trouver une solution à partir d'un modèle complet se cassent la gueule à cause des restrictions environementales propres à la programmation. Et c'est là que le génie de l'analyste / architecte entre en jeux afin de pouvoir effectivement implémenter l'algorithme. Et ça, c'est souvent pas un matheux qui pourra le faire.

    Il suffit d'aller voir projecteuler.net pour se faire une idée. Tous les problèmes ont une solution mathématique qu'il suffit de googler pour trouver.
    Il est dit que toutes les solutions du site peuvent être calculées en moins d'une minute sur une machine moyenne. Trouver le bon compromis entre l'algorithme mathématique et l'implémentation informatique est un véritable challenge.

  2. #822
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par JulienDuSud Voir le message
    Je ne peux que rejoindre koala sur ce point.

    L'algorithmique matheux, c'est bien, mais c'est souvent impossible à implémenter dans un logiciel informatique où tout espace et vitesse est restreint, toujours finit.

    Souvent, l'algorithmie matheux parvient à trouver une solution programmables à des problèmes bien précis qui ne sont qu'un modèle restreint du problème réel, et ceux qui essaient de trouver une solution à partir d'un modèle complet se cassent la gueule à cause des restrictions environementales propres à la programmation. Et c'est là que le génie de l'analyste / architecte entre en jeux afin de pouvoir effectivement implémenter l'algorithme. Et ça, c'est souvent pas un matheux qui pourra le faire.

    Il suffit d'aller voir projecteuler.net pour se faire une idée. Tous les problèmes ont une solution mathématique qu'il suffit de googler pour trouver.
    Il est dit que toutes les solutions du site peuvent être calculées en moins d'une minute sur une machine moyenne. Trouver le bon compromis entre l'algorithme mathématique et l'implémentation informatique est un véritable challenge.
    Mon intervention portait plutôt sur le fait que l'algorithmique n'a parfois simplement rien de mathématique...

    Toute la partie UML qui a trait aux diagrammes de séquences, d'états ou de communication entre tout à fait dans ce que l'on peut appeler de manière vaste et générique "l'algorithmique"...

    Ce sera cet algorithme qu'il faudra réellement implémenter (c'est d'ailleurs pourquoi j'aime autant quitter UML à ce niveau et partir sur un "bon vieux" nassi-sheiderman , mais ce n'est qu'un avis perso, d'autant plus que je connais les réticences de certains vis à vis de cette représentation algorithmique )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #823
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par metagoto Voir le message
    Il me manquait ces détails.. de taille!
    Autant pour moi/nous : c'était tellement "évident" que je n'ai pas pensé à le dire de prime abord... Ce sont des questions qui m'ont fait penser que tu n'avais pas ces éléments en main (car si tu les avais eus, tu n'aurais jamais eu cette réaction).

    Citation Envoyé par metagoto Voir le message
    Je résonnais plus en terme de règles omniscientes, pré-établies et applicable de facto à tous projets d'une même société (modulo des exceptions éparses -bien entendu).
    Cela arrive, mais presque exclusivement dans des sociétés qui sont dans des niches ultra-restreintes, avec donc un seul "type" de projet ou presque. Et cela reste un cas rare malgré tout.

    Citation Envoyé par metagoto Voir le message
    Vous allez me dire que c'est d'une évidence affligeante. D'accord, mais comme par ailleurs on peut lire ci et là que certains bannissent des pans entiers du langage C++ quel qu'en soit le projet, ça pouvait corroborer l'illusion dans laquelle je me suis fourvoyé
    C'est comme tout, connaître l'interlocuteur aide aussi à remettre les choses dans leur contexte. Sans précisions particulières, pour ma part, je parle en général de code temps réel bas niveau, par exemple.

    Citation Envoyé par metagoto Voir le message
    Alors ça me rassure sur le devenir de l'espèce humaine!
    Et puis surtout, tu le verras par toi-même, ce sont les développeurs eux-mêmes qui font les règles de codage en général. Les qualiticiens ne font que vérifier que leurs règles concordent avec les règles Qualité générales (ISO 9001 le plus souvent), et/ou les normes client (DO178, EN50155, etc.). Si ça remplit toutes les cases, ils valident, sinon ils te disent les points à revoir.

    Après, si t'as une équipe de dévs "mous" ou une équipe "dynamique", ça change plus ou moins vite. Comme d'hab, il te faudra des chiffres pour étayer et rendre ta proposition financièrement intéressante, mais ça, ça vient en prenant de l'expérience et/ou en travaillant sur ces règles avec un "ancien" qui t'aidera à formaliser tes idées.

    Le plus important, c'est de comprendre que ces règles sont là pour accélérer le développement, le rendre plus fiable et rendre la prise en main d'un nouveau projet plus simple. Si tu n'y vois que des contraintes, il y a deux solutions : soit tu n'as pas compris un point très important (et il te faut alors t'y mettre rapidement), soit la boite est en train de couler pour incompétence chronique...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  4. #824
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Citation Envoyé par JulienDuSud
    Tous les problèmes ont une solution mathématique qu'il suffit de googler pour trouver.
    Tu sers à quoi alors si les solutions aux problèmes qu'on t'a engagé pour résoudre existent déjà sur Internet ?

    Citation Envoyé par fcharton
    Si tu as un problème de ce type, tu embauches un matheux
    Sauf que l'algorithmique, c'est de l'informatique, pas des maths...

    Citation Envoyé par fcharton
    C'est en ce sens que je dis que c'est facile. Du point de vue de l'entreprise, c'est déterministe et prévisible. Le reste du développement (architecture, interface, maintenance, évolution) c'est une autre paire de manches...
    Ben c'est pareil. S'il te faut un informaticien théorique qui cherche des solutions à ton problème, c'est pas du tout déterministe non plus.

    Citation Envoyé par fcharton
    mais en entreprise, c'est rarement ça qui pose problème.
    Dans la plupart des entrerpises, on fait essentiellement du code "métier" qui n'est en fait que de la glue et de l'organisation entre les divers composants, donc le problème ne se pose pas.

  5. #825
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2009
    Messages : 237
    Par défaut
    il y a une phrase avec laquelle j'étais dans la majorité des cas contre il s'agit de "C'est pareil pour tous les langages", mais pour ce cas précis d'algorithmique je crois que c'est pareil pour la majorité des langages et C++ ne présente pas de difficulté ni de complexité par rapport a d'autres langages et ça veut pas dire que c'est pas compliqué du tout, je veux dire que si un algorithmique est difficile en C++ ça doit l'être autant ou plus pour d'autres langages , je dirais même plus facile dans le cas de calcul mathématique vu la nature d'utilisation de C++ dans des domaines de calcul et on a une boite a outil très intéressante en C++pour ça.

    et pour le cas d'algorithme dans le sens de diagramme de séquence mentionné par Koala, donc qui concerne les contrôleurs qui déroule une séquence ça ne présente aussi aucune difficulté particulière en C++ par rapport a d'autres, quoi que d'autres technologies essaye d'isoler ce type de comportement dans des diagrammes graphiques pour plus de lisibilité comme le cas de WF de dotnet.

  6. #826
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    Citation Envoyé par loufoque Voir le message
    Tu sers à quoi alors si les solutions aux problèmes qu'on t'a engagé pour résoudre existent déjà sur Internet ?
    Je parlais des problèmes de projecteuler.net, où ce sont des problèmes de calcul où le temps et la place sont restreintes. Bien sûr que pour ce genre de problèmes c'est le programmeur qui doit se débrouiller, je n'ai jamais dit le contraire.

    Je voulais juste appuyer le fait que résoudre un problème mathématiquement ne veut pas dire le résoudre informatiquement.

  7. #827
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Issam_Lahlali Voir le message
    mais pour ce cas précis d'algorithmique je crois que c'est pareil pour la majorité des langages
    Je ne suis que partiellement d'accord...

    Souvent, les algorithmes existent dans des livres avant d'exister comme du code. Les langages qui sont utilisés dans les livres (le Fortran autrefois, le C ensuite) ont un petit avantage sur les autres, car les auteurs des algorithmes, qui ont testé leurs idées dans ces langages, auront parfois utilisé certaines de leurs caractéristiques.

    Egalement, il y a des langages très orientés algos. Je vais citer l'APL, une fois de plus... Mais le C et le Fortran seraient probablement en bonne position. Je pense que le C++ s'en tire "pas mal" du fait de son origine C, et de son caractère bas niveau...

    Citation Envoyé par Issam_Lahlali Voir le message
    je dirais même plus facile dans le cas de calcul mathématique vu la nature d'utilisation de C++ dans des domaines de calcul et on a une boite a outil très intéressante en C++pour ça.
    Là je ne suis pas trop d'accord. Le C++ (et le C avant lui) pêchent notoirement en matière de calcul mathématique. Regarde la STL, la seule classe dédiée aux calculs numériques (valarray) est à moitié finie, pas de matrices, une librairie mathématique ultra-light ... Il manque plein de choses. Boost corrige un certain nombre de choses, mais on est encore très loin du compte.

    Dans ce domaine le C et le C++ s'imposent parce qu'ils permettent d'aller vite, et sont (ou peuvent être) procéduraux (les algos sont généralement publiés dans un style très procédural), mais pas grâce à leur librairie mathématique...

    Francois
    Dernière modification par Invité ; 06/09/2009 à 22h05.

  8. #828
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par JulienDuSud Voir le message
    Je parlais des problèmes de projecteuler.net, où ce sont des problèmes de calcul où le temps et la place sont restreintes. Bien sûr que pour ce genre de problèmes c'est le programmeur qui doit se débrouiller, je n'ai jamais dit le contraire.
    Tu crois que c'est spécifique à l'informatique et absent des maths?

    Un grand nombre d'algorithmes utilisés aujourd'hui ont été inventés, bien avant l'ordinateur, par des gens comme Gauss, ou Euler, qui devaient trouver des "trucs" pour réduire temps et espace, parce qu'ils faisaient leurs calculs à la main (essaie un jour de calculer à la main 10 décimales de pi, tu verras...)

    J'ai regardé les premiers problèmes de Project Euler, pour un certain nombre je n'ai vu que des maths. En fait, sur les 10 premiers, je pense que les 1, 2, 5, 6, 8 et 9 doivent se résoudre en papier crayon, sans l'aide d'un ordi... (je vais d'ailleurs essayer, j'éditerai mes commentaires ici, mais je crois que l'idée générale des challenge, c'est qu'en commençant par poser les maths, on peut tenir la contrainte d'une minute...)

    EDIT : et à la fin de la page de présentation, ils disent ca...

    "Project Euler exists to encourage, challenge, and develop the skills and enjoyment of anyone with an interest in the fascinating world of mathematics."

    Francois
    Dernière modification par Invité ; 06/09/2009 à 22h31.

  9. #829
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Oh oui même au delà des 10 y'en a pas mal qui peuvent être fait au papier + crayon. Après y'en a qui font plus mal et qui nécessite la puissance de calcul de l'ordi forcément.

  10. #830
    Invité
    Invité(e)
    Par défaut
    En fait, sur les premiers, l'ordi apparait souvent comme une "tentation". Prends l'exemple du 2... Il y a une solution papier crayon (et un coup de calculette ou d'excel), mais la tentation de programmer la somme est énorme.

    Le 4 est encore pire, il y a (certainement) une solution élégante (en fait je suis certain d'avoir lu un truc là dessus, chez Knuth, je crois), sans elle, ce n'est pas faisable à la main... En revanche, pour un ordi, il y a 400 000 produits à tester, ca ne coute rien...

    EDIT : le problème no4 est effectivement un excellent exemple de l'influence des maths sur l'algorithmique... Le but est de trouver le plus grand palindrome (nombre qui se lit pareil dans les deux sens, comme 123321) produit de deux nombres de 3 chiffres...

    Sans réfléchir et bestialement, il suffit de tester tout les produits de 100*100 à 999*999 (en sens inverse, plutôt...), et on va trouver la solution.

    Maintenant, on peut aussi refléchir sur les propriétés de ces nombres "palindromiques" (divisibilité et tout ca). Leur symétrie d'écriture se traduit forcément en propriétés mathématiques. Du coup, on va pouvoir réduire la recherche, et dans ce cas précis, résoudre le problème à la main (ici, on se ramène finalement à une quinzaine de multiplications...)

    Maintenant, là ou les matheux gagnent toujours (en informatique) c'est quand la question est posée pour de plus grandes valeurs : par exemple, trouver le plus grand palindrome produit de deux nombres de 8 chiffres...

    ReEdit : le problème de la semaine (no 254) est un excellent exemple de ce que j'essaie d'expliquer... Le calcul qu'on demande de faire n'est pas compliqué. Il s'agit de sommer une série, qui se calcule sommant deux fois les chiffres d'un nombre. En fait, la vérification de l'exemple qu'ils fournissent (valeur du 20eme terme de la série) est quasi immédiate quand on la programme. Oui mais, la somme des chiffres d'un nombre s'apparente à un logarithme, on le fait ici deux fois, ce qui signifie qu'une solution "force brute" s'apparente à une double exponentielle. Aucune astuce informatique ne pourra régler le problème, il faut impérativement faire ses maths avant de programmer.

    Francois
    Dernière modification par Invité ; 07/09/2009 à 04h06.

  11. #831
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2009
    Messages : 237
    Par défaut
    Citation Envoyé par fcharton Voir le message
    Souvent, les algorithmes existent dans des livres avant d'exister comme du code. Les langages qui sont utilisés dans les livres (le Fortran autrefois, le C ensuite) ont un petit avantage sur les autres, car les auteurs des algorithmes, qui ont testé leurs idées dans ces langages, auront parfois utilisé certaines de leurs caractéristiques.
    effectivement le C est peut être plus adapté vu l'existant , mais pour les algo je trouve que la grande difficulté est de trouver le bon algo pour une problématique donné que son implémentation,et pour cet avantage de C on peut faire de même en C++ aussi en bénéficiant de son caractère multi-paradigme.

    et comme t'a bien mentionné le C++ s'en sort très bien pour les algo, nettement mieux que la majorité des nouveaux langages et c'est pas ce point qui joue en défaveur de C++ mais plus en défaveur des autres nouveaux langages.

    En gros pour les algos le grand risque est dans la phase ou on utilise crayon et papier, des fois on conçoit un algo mal adapté a la problématique et on entre dans le piège de la démarche empirique ou a chaque fois on le réadapte par rapport aux bugs remontés et la on passe notre temps a faire de la maintenance.

    et concrètement et quelque soit le langage d'ailleurs on zappe cette phase de crayon-papier et on commence par coder directement l'algo et au fur et a mesure on l'adapte par rapport aux cas mal traités ou par rapport aux performances et la on fait de l'empirique , et l'empirique en général engendre une usine a gaz puisqu'on fait patch sur patch.

  12. #832
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Et réussir à faire de l'optimal pour chaque cas particulier à partir d'un système générique, tu n'as pas l'impression qu'il y a comme un problème de conception à la base ?
    En fait, il me semble que la C++ et la STL prévoient justement ça. La possibilité de spécialiser des templates, de spécifier l'allocateur est justement là pour ça. Autrement dit, tu peux faire du spécifique par dessus la couche générique, de manière totalement transparente.

    Je suis aussi un peu étonné de l'exemple que tu as donné (vérification des débordements de tableau) puisque la STL ne le fait pas (sauf si tu lui demandes explicitement, par exemple, en utilisant at() plutôt que [] ).

  13. #833
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par white_tentacle Voir le message
    Je suis aussi un peu étonné de l'exemple que tu as donné (vérification des débordements de tableau) puisque la STL ne le fait pas (sauf si tu lui demandes explicitement, par exemple, en utilisant at() plutôt que [] ).
    En fait, rien n'indique dans la STL qu'il ne faut pas tester avec []. Dans la version sécurisée de la STL proposée par Visual Studio, il y a les mêmes vérifications avec [] qu'avec at().

  14. #834
    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
    Citation Envoyé par Matthieu Brucher Voir le message
    En fait, rien n'indique dans la STL qu'il ne faut pas tester avec []. Dans la version sécurisée de la STL proposée par Visual Studio, il y a les mêmes vérifications avec [] qu'avec at().
    Et quand ça rate, le debugger t'envoie dans CRT_Debug() ou je ne sais quoi, oui

  15. #835
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par white_tentacle Voir le message
    En fait, il me semble que la C++ et la STL prévoient justement ça. La possibilité de spécialiser des templates, de spécifier l'allocateur est justement là pour ça. Autrement dit, tu peux faire du spécifique par dessus la couche générique, de manière totalement transparente.
    Mais on ne peut pas hériter d'une classe de la STL, et commencer à jouer avec les allocateurs me semble être franchement plus l'usine à gaz que quoi que ce soit d'autre...
    De plus, cela ne supprimera pas le code générique des templates, or c'est surtout là-dessus qu'un algo maison "en dur" battra les algos génériques.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  16. #836
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par Mac LAK Voir le message
    Mais on ne peut pas hériter d'une classe de la STL,
    Tu ne peux pas hériter publiquement d'une classe de la STL..
    et commencer à jouer avec les allocateurs me semble être franchement plus l'usine à gaz que quoi que ce soit d'autre...
    Tu as une telle granularité dans politiques des conteneurs template qu'il t'est réellement possible de ne changer que le trait qui ne te convient pas

    Il est vrai que, de manière classique, on ne travaille qu'avec le permier, mais c'est oublier un peu vite qu'il en existe trois autres derrière
    De plus, cela ne supprimera pas le code générique des templates, or c'est surtout là-dessus qu'un algo maison "en dur" battra les algos génériques.
    Définis le comportement de ton trait "maion" correctement et utilise le dans la déclaration de ton conteneur, ce ne sera plus le code générique qui sera utilisé, mais celui de ton trait maison
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  17. #837
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par white_tentacle Voir le message
    En fait, il me semble que la C++ et la STL prévoient justement ça. La possibilité de spécialiser des templates, de spécifier l'allocateur est justement là pour ça. Autrement dit, tu peux faire du spécifique par dessus la couche générique, de manière totalement transparente.
    Pour les conteneurs seulement, et seulement si l'amélioration maison porte sur le stockage et l'allocation... Si tu as besoin d'une version particulière d'un algo (un tri adapté à un cas particulier, pour citer un exemple banal), ou d'une modification de structure d'un conteneur qui impacte également ses "fonctions de base" (toutes modifications des maps ou des sets, je pense). T'es un rien coincé.

    D'ailleurs, la STL ne prétend pas le contraire, tous ses auteurs expliquent qu'elle fournit "de bonnes implémentations de méthodes standard", mais pas "les meilleures méthodes".

    Francois

  18. #838
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    En fait, rien n'indique dans la STL qu'il ne faut pas tester avec []. Dans la version sécurisée de la STL proposée par Visual Studio, il y a les mêmes vérifications avec [] qu'avec at().
    Son contrat te dit que c'est interdit d'appeler [] hors bornes. Ça laisse fortement présager que ça ne doit pas être testé par l'appelé, mais par l'appelant, d'autant plus qu'il y a une méthode at() qui elle, teste dans l'appelé.

    Pour les conteneurs seulement, et seulement si l'amélioration maison porte sur le stockage et l'allocation... Si tu as besoin d'une version particulière d'un algo (un tri adapté à un cas particulier, pour citer un exemple banal), ou d'une modification de structure d'un conteneur qui impacte également ses "fonctions de base" (toutes modifications des maps ou des sets, je pense). T'es un rien coincé.
    si tu spécialises std::map<MonType>, tu fais bien ce que tu veux, non ? (ça revient effectivement à tout refaire en spécifique, j'en conviens, mais ça a l'avantage de pouvoir être fait de manière transparente, sans revoir tout le code, et après coup, une fois que tu as identifié par profilage où il faut optimiser).

  19. #839
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Tu ne peux pas hériter publiquement d'une classe de la STL..
    Ils ont rajouté le "virtual" qui va bien devant le destructeur, pour l'héritage ?
    Jusqu'à présent, une classe de STL, soit j'en hérite en rajoutant de nouvelles méthodes, soit je l'encapsule, mais l'héritage "tel quel" est plus que déconseillé, si je me souviens bien, rapport au destructeur non virtuel...

    Citation Envoyé par koala01 Voir le message
    Tu as une telle granularité dans politiques des conteneurs template qu'il t'est réellement possible de ne changer que le trait qui ne te convient pas
    Je ne sais pas si j'ai été bien clair, mais le problème d'optimisation n'est pas dans les arguments du template, mais dans le CODE des MÉTHODES du template... Pas réellement dans le "T.push_back()" appelé, si tu préfères, mais dans le fait que l'on aie auparavant un truc du genre "if (T.full()) throw ....".

    Si l'on en vient à devoir surcharger et/ou réécrire quasiment chaque méthode du template, et/ou construire un trait ultra-spécifique et dépendant de l'implémentation de la STL, tu n'as pas l'impression que c'est nettement moins maintenable qu'un code maison ?
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  20. #840
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Mac LAK Voir le message
    Ils ont rajouté le "virtual" qui va bien devant le destructeur, pour l'héritage ?
    Si tu fais un héritage privé, alors tu ne pourras pas le manipuler comme la classe de base. Donc le destructeur peut ne pas être virtuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    struct A
    {};
    struct B : private A
    {
    };
     
    int main()
    {
       A *pa = new B;//erreur
    }
    Citation Envoyé par MinGW
    error: 'A' is an inaccessible base of 'B'
    Citation Envoyé par VCExpress
    'cast de type'*: la conversion de 'B *' en 'A *' existe, mais n'est pas accessible

Discussions similaires

  1. Pourquoi mon image ne s'affiche plus
    Par Gouyon dans le forum 2D
    Réponses: 5
    Dernier message: 18/03/2011, 14h51
  2. Réponses: 6
    Dernier message: 27/12/2010, 16h40
  3. Réponses: 10
    Dernier message: 22/12/2009, 20h58
  4. Réponses: 6
    Dernier message: 26/06/2006, 16h52
  5. Pourquoi n'y a-t-il plus de "délestage" massif sur le forum ?
    Par Eusebius dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 7
    Dernier message: 26/05/2006, 00h16

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