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

SL & STL C++ Discussion :

valarray - remplaçant du [] ?


Sujet :

SL & STL C++

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 2
    Par défaut valarray - remplaçant du [] ?
    Bonjour tout le monde,

    J'ai une petite question concernant la STL et plus particulier les valarray. Est-ce qu'on peut considérer ces derniers comme des remplaçant du tableau "classique" comme par exemple int tableau[5]; ?

    Une deuxième question que je me posais était de savoir pour quel raison les concepteurs de la STL ont choisis d'empêcher de prendre les conteneurs comme classe de bases (puisque leurs destructeurs ne sont pas virtuels) ?

    Merci d'avance pour vos réponses.

  2. #2
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    J'ai une petite question concernant la STL et plus particulier les valarray. Est-ce qu'on peut considérer ces derniers comme des remplaçant du tableau "classique" comme par exemple int tableau[5]; ?
    Je connais pas les valarray (ça existe dans la STL ça O__o?) mais l'équivalent d'un tableau tel que tu le décris est un std::vector. Il a toutes les mêmes caractéristiques sauf qu'il connais sa taille (nombre d'elements) et qu'il peut augmenter de taille dynamiquement (et autres spécificitées à connnaitre si tu as précisément besoin de savoir ce qu'il se passe en mémoire).

    Une deuxième question que je me posais était de savoir pour quel raison les concepteurs de la STL ont choisis d'empêcher de prendre les conteneurs comme classe de bases (puisque leurs destructeurs ne sont pas virtuels) ?
    Parceque le but c'est de les utiliser, pas d'en faire des variantes. Un conteneur de la STL est écrit et spécialisé pour "contenir" selon sa propre philosophie (list, vector, map, etc). Les objets qui ont besoin de gerer des groupes d'autres objets peuvent se servir de ces conteneurs pour contenir les objets pendant qu'eux s'occupent de les gérer.

    Conceptuellement parlant, hériter une classe d'une classe conteneur, c'est un peu comme utiliser son propre ventre comme si c'était un sac. C'est inadequate.

    Bon en fait ya aussi des raisons techniques il me semble, mais je ne me souviens plus des détails.

  3. #3
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 2
    Par défaut
    Pour ma question concernant la dérivation des classes de conteneur, c'est justement les raisons techniques qui m'intéressent. Pouruoi ne pas le permettre si l'on veut créer un nouveau type de coneneur ayant des similitudes profondes avec un type pré-existant ?

  4. #4
    Membre expérimenté Avatar de Kujara
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 262
    Par défaut
    Citation Envoyé par Magorath Voir le message
    Pour ma question concernant la dérivation des classes de conteneur, c'est justement les raisons techniques qui m'intéressent. Pouruoi ne pas le permettre si l'on veut créer un nouveau type de coneneur ayant des similitudes profondes avec un type pré-existant ?
    Rien ne t'en empeche.

    Le manque de fonction virtuelle t'empeche juste de stoquer tes instances sur un pointeur / reference de la classe de base.

    Et ce manque s'explique facilement par son inutilité et son cout point de vue perfs.

    Apres tout, tu ne crée jamais de _xtree toi même, n'est-ce pas ? et pourtant, c'est une des classes de base de map ...

  5. #5
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Pour répondre à Klaim:
    Exemple de valarray: http://www.josuttis.com/libbook/num/val2.cpp.html
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  6. #6
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    valarray été prévu pour avoir une classe de tableaux avec lesquels faire du calcul numérique, par opposition à vector, qui est une classe plus générique.
    Je ne les ai jamais vraiment utilisés, mais je crois que de l'avis général, ils n'étaient pas assez matures au moment de leur introduction dans le standard. En particulier, ils n'exploitent pas toutes les fonctions de gain de performance des templates, ce qui est disqualifiant pour une bibliothèque numérique.

    Pour ce qui est de l'héritage des conteneurs de la STL, l'héritage a un coût. Si il ne sert à rien, pourquoi payer ce coût ? Si les vectors avaient eu un overhead clairement mesurable par rapport aux tableaux C, ils ne seraient jamais passés.

    Tu peux faire du polymorphisme avec les vecteurs, simplement, ce sera du polymorphisme résolu à la compilation, et l'élément de base n'est pas le conteneur, mais l'itérateur.

    Le principal problème que je vois en terme d'extensibilité, c'est que pour faire une classe semblable en fonctionnalité à un conteneur ou un itérateur, et compatible avec les algorithmes de la STL, il faut écrire beaucoup de code. Trop. Même si pour les itérateurs, boost::iterator permet d'alléger un peu ça.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 633
    Par défaut
    Salut,

    En plus, pour le point de vue technique, les différentes classes conteneurs sont des classes template...

    Or le mécanisme meme des template empeche la virtualisation des méthodes (tu pourrait *éventuellement* utiliser le CRTP, par contre mais, en vaut-ce réellement la peine )

    Dés lors, pas de destructeur virtuel, et donc, pas de polymorphisme possible (sans compter que comme indiqué plus haut, l'utilité de la chose n'est pas prouvée )
    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

  8. #8
    Membre éclairé Avatar de ttone
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    589
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 589
    Par défaut
    Vous confirmez que pour des opérations de type audio (additions, multiplication par constante, etc) les VALARRAYs permettent un traitement plus rapide ? en évincant visuellement et en niveau inférieur des incrémentations for ?

Discussions similaires

  1. remplaçant à AVG qui n'est plus gratuit
    Par tiboleo dans le forum Sécurité
    Réponses: 3
    Dernier message: 03/01/2007, 10h42
  2. Recherche une fonction remplaçante :)
    Par baleiney dans le forum Langage
    Réponses: 10
    Dernier message: 28/06/2006, 17h23
  3. Réponses: 1
    Dernier message: 07/06/2006, 18h18
  4. Réponses: 8
    Dernier message: 01/11/2005, 22h48

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