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

GTK+ avec C & C++ Discussion :

GList vs g_array


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut GList vs g_array
    Petit problème.

    Je dois charger une image I de taille (x,y). I est composéede trois composantes R,V,B. Je dois trier ces composantes par ordre croissant pour en extraire la médiane de chacune d'elle.

    Ma première idée a été d'utiliser une GList (ou GSList, ca ne change rien au principe) puis je me suis dit que finalement les g_array feraient tout aussi bien l'affaire.

    La question est donc : les g_array sont-ils plus appropriés pour ce genre de travail? A moins qu'une autre méthode mieux adaptée existe?

    (Oui je sais là ca fait 2 questions, mais bon...)

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Un GArray, ou même un tout bête unsigned char * (enfin 3, 1 pour chaque composante) me paraissent plus appropriés qu'une GList

  3. #3
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Disons pour approfondir que je me pose la question entre ces deux moyens parce qu'ils disposent tous les deux d'une fonction de tri toute faite. La roue étant déjà inventée...

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Une GList, c'est un peu du gâchis, tu vas allouer un élément de liste pour chaque pixel, ça va faire un beau paquet d'allocations au final, et les données vont être éparpillées un peu partout en mémoire (ce que le cache du processeur n'aime pas trop). Avec un tableau, tu feras une seule allocation, et tout sera au même endroit.

  5. #5
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Liste chaînée
    Avantages
    ajout/suppressions rapide d'éléments (temps constant)

    Inconvénients
    parcours des éléments lent
    accès au n-ième élément lent (il faut parcourir la liste à partir du premier élément)

    Tableau dynamique :
    Avantages :
    parcours des éléments rapide
    accès au n-ième élément rapide

    Inconvénients
    insertion/suppression d'éléments lent

    Là dans ton cas, tu connais déjà le nombre d'éléments que tu as à stocker, et tu peux les stocker tous à la suite. Une liste n'est pas adaptée.

    Tu peux bien sûr utiliser un tableau dynamique comme GArray, et utiliser ses fonctions de tri, ou bien un tableau de taille fixe alloué par un simple g_new ou g_malloc, suivi d'un appel à la fonction qsort de la libc qui fait un tri de type quicksort.

    http://fr.wikipedia.org/wiki/Liste_c...3%A9e#Principe
    http://fr.wikipedia.org/wiki/Tableau...ces_et_limites

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    Citation Envoyé par liberforce Voir le message
    Liste chaînée
    Avantages
    ajout/suppressions rapide d'éléments (temps constant)
    Ajout/suppression rapide d'éléments : uniquement si c'est au début de la liste dans le cas des GList/GSList ou si on a déjà un pointeur sur l'élément après lequel on va ajouter/supprimer un élt (en gros). Sinon c'est linéaire avec la taille de la liste.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Supprimer le contenu d'une GList
    Par bigben89 dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 23/08/2006, 16h20
  2. Widget et GList *
    Par corwin dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 11/08/2006, 17h28
  3. GList et libération de mémoire
    Par corwin dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 09/08/2006, 12h14
  4. GList et passage de paramètre
    Par corwin dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 03/08/2006, 09h22
  5. GList ayant toujours la même valeur
    Par GLDavid dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 18/03/2005, 11h55

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