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 :

std::vector et performance


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 115
    Par défaut std::vector et performance
    Bonjour tout le monde,

    Je suis entrain d'écrire un programme en c++ qui manipule un grand nombre de donnée, j'utilise std::vector pour insérer et supprimer les donnée dynamiquement , mais malheureusement le temps d'exécution et trop lent.

    Est ce que quelqu'un connais une autre méthode autre que les stl pour améliorer le temps d'exécution ?

    Merci d'avance

  2. #2
    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
    Quel est ton motif d'ajout ? Au début ? A la fin ? N'importe où ? Par bloc ou un par 1 ? Tu connais le nombre total à ajouter avant ? Quel est l'ordre de grandeur de ce nombre ?..
    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.

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 115
    Par défaut
    Quel est ton motif d'ajout ? Au début ? A la fin ? N'importe où ? Par bloc ou un par 1 ? Tu connais le nombre total à ajouter avant ? Quel est l'ordre de grandeur de ce nombre ?..

    D'abord merci pour la réponse,
    Pour l'ajout c'est n'importe où, il se fait un par un et je ne connais pas le nombre total à ajouter.
    Pour ce qui est la grandeur de se nombre, 1360800000 à peut prés.

    est ce que les std::list ira mieux ?

    Merci

  4. #4
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Bonjour,
    Citation Envoyé par fleurdelys77 Voir le message
    Pour ce qui est la grandeur de se nombre, 1360800000 à peut prés.i
    1360800000 éléments !! Tu es sûr qu'il n'y pas quelques zéros en trop ?
    Car si l'on suppose que tu insères des int, donc 4 octet par éléments, ça nous fait 5.09 Go au total ! Quel que soit le conteneur utilisé tu vas mettre un pc à genou en tentant de tout charger en RAM...

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 115
    Par défaut
    pour l'insertion des données il me prend 2mn 38 s (sava )
    mon problème se pose au niveau de la suppression ( la suppression se fait au fur et à mesure dans des endroits du tableau que je ne connais pas au préalable.

    est il possible de résoudre se problème ?

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par défaut
    t'as pensé à utiliser une database?
    sqlite? (en memoire ou sur disque dependant du nombre d'element et de la rapidité)
    tu t'evites beaucoup de probleme (de recherche, de suppression et d'ajout...)

    en tous les cas, le vecteur n'est pas adapté pour de la suppression autre que celui de fin. et la list n'est pas vraiment adaptée pour de l'acces rapide...

    peut-etre continuer avec un vecteur mais traiter les "remove" par des index qui deviennent libres (à stoker dans une list FIFO?)
    -> erase est beaucoup mieux, echanger avec celui de fin puis effacer celui de fin ... hyper rapide...

  7. #7
    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
    Pour ce qui est de faire des suppressions au milieu, un std::list sera effectivement bien plus rapide qu'un vecteur. Le problème, c'est qu'il y a pour std::list un surcoût mémoire par élément (2 pointeurs, en gros), ce qui vu le volume de données manipulé pourrait poser des problèmes.

    Maintenant, si ton problème est la suppression, ne pourrais-tu pas la faire de manière plus efficace ? Par exemple, pour enlever plein d'éléments d'un coup, même non contigus, plutôt que des les enlever un par un, il est bien plus efficace de passer par du erase/remove.
    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.

Discussions similaires

  1. std::vector : dynamique ou statique, pile et tas
    Par salseropom dans le forum SL & STL
    Réponses: 7
    Dernier message: 24/01/2005, 13h22
  2. std::sort() sur std::vector()
    Par tut dans le forum SL & STL
    Réponses: 20
    Dernier message: 05/01/2005, 19h15
  3. char[50] et std::vector<>
    Par tut dans le forum SL & STL
    Réponses: 9
    Dernier message: 12/10/2004, 13h26
  4. Réponses: 8
    Dernier message: 26/08/2004, 18h59
  5. Sauvegarde std::vector dans un .ini
    Par mick74 dans le forum MFC
    Réponses: 2
    Dernier message: 12/05/2004, 13h30

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