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 :

Equivalent de List (Java) en C++ ?


Sujet :

C++

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par d�faut Equivalent de List (Java) en C++ ?
    Bonjour � tous,

    Voil� j'aurais voulu savoir si en C++ il est possible avec des list (ou vector, queue, ...) de faire ce que les m�thodes suivantes font en Java avec le type List :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    E get(int index) // retourne l'élément à la position index 
    et
    E remove(int index) // enlève l'élément à la position index, rechaîne la liste et retourne l'élément supprimé
    En C++, j'ai vu qu'il faut passer par des iterators mais je n'ai pas r�ussi � acc�der directement � un �l�ment de la liste (comme le fait la m�thode get) sans la parcourir et de m�me pour supprimer un �l�ment.

    Merci d'avance pour vos r�ponses

  2. #2
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2005
    Messages
    183
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 183
    Par d�faut
    Avec les vector tu y acc�des comme avec un tableau :

    monVector[i] = ...;

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par d�faut
    Citation Envoy� par loacast
    Avec les vector tu y acc�des comme avec un tableau :

    monVector[i] = ...;
    Oui, j'avais vu �a mais j'ai toujours le probl�me pour retirer un �l�ment � une position donn�e et recha�ner le vector.

  4. #4
    Membre confirm�
    Profil pro
    �tudiant
    Inscrit en
    Novembre 2004
    Messages
    84
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 84
    Par d�faut
    Ca se fait tout seul via la m�thode erase(iterator)...

    Exemple :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    for(vector<le_type_des_objets_de_ton_vector>::iterator it = ton_vector.begin() ; it != ton_vector.end() ; ++it) {
         if(ta_condition_pour_que_ton_objet_soit_supprimé) {
              ton_vector.erase(it);
         }
    }

  5. #5
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Ce qu'il faut savoir c'est que tu pourras toujours obtenir un it�rateur tr�s facilement � partir d'un indice :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    std::vector<xxx> v;
    std::vector<xxx>::iterator it = v.begin() + 5;
    v.erase(it);
    Mais les suppressions al�atoires dans un vecteur ne sont pas ce qu'il y a de plus rapide, en g�n�ral on pr�f�re les listes pour �a. Enfin bon �a d�pend du contexte.

  6. #6
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Et quand tu envisages des retraits, il ne faut pas r�fl�chir en termes d'indices -- surtout dans les listes (qui sont cha�n�es).

    Identifies l'�l�ment qui t'int�resse par son it�rateur (d'autant que toutes les fonctions de recherche renvoient des it�rateurs, et non des indices), et s�vis.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par d�faut
    Citation Envoy� par Laurent Gomila
    Ce qu'il faut savoir c'est que tu pourras toujours obtenir un it�rateur tr�s facilement � partir d'un indice :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    std::vector<xxx> v;
    std::vector<xxx>::iterator it = v.begin() + 5;
    v.erase(it);
    Mais les suppressions al�atoires dans un vecteur ne sont pas ce qu'il y a de plus rapide, en g�n�ral on pr�f�re les listes pour �a. Enfin bon �a d�pend du contexte.
    Tout d'abord, merci � tous pour vos r�ponses.

    Sinon, Laurent (Gomila) le code que tu m'as donn� pour les vector ne marche pas pour les list. Est-ce qu'il est possible de faire la m�me chose avec des list ou pas.

  8. #8
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Non, il n'y a que les it�rateurs de vector qui sont de type "acc�s al�atoire". Pour tous les autres, il faut utiliser std::advance :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    std::list<xxx> v;
    std::list<xxx>::iterator it = v.begin();
    std::advance(it, 5);
    Mais bon, si tu en arrives � manipuler des indices avec des listes... Il y a un probl�me quelque part. Normalement tu devrais toujours arriver avec un it�rateur.

  9. #9
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par d�faut
    Ce que je veux faire c'est au d�part avoir une liste (un vector ou autre chose) qui contient tous les nombres qu'il est possible de tirer.
    Et ensuite, lorsque qu'un nombre est tir� (d'apr�s son indice dans la liste) je l'enl�ve de cette liste afin de ne pas le retirer.
    Comme mon application lance une "simulation" je ne peux pas me permettre de parcourir � chaque fois la liste � la recherche du nombre puisque mon programme lance 1 000 000 de simulations � chaque ex�cution afin d'obtenir des r�sultats exploitables.

  10. #10
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Citation Envoy� par Core8
    Et ensuite, lorsque qu'un nombre est tir� (d'apr�s son indice dans la liste)
    Pourquoi tu manipules une liste avec des indices ? Ce n'est pas fait pour.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  11. #11
    Membre �m�rite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par d�faut
    Ah mais tu veux en fait obtenir une sorte de permutation.

    Au lieu de tirer un indice au pif, puis le retirer, tu peux stocker toutes tes valeurs possibles dans un tableau, et le r�ordonner de mani�re al�atoire.

    Pour �a, tu peux cr�er une permutation en faisant plein de transpositions au pif (comprendre : des swaps de 2 valeurs), d'apr�s le th�or�me qui dit que toute permutation de taille n peut s'exprimer comme produit de (n-1) transpositions au plus, un truc comme �a.

    Ya un algorithme, o� en gros tu parcours chaque �l�ment, et tu �changes sa valeur avec celle d'un autre �l�ment dont l'indice est tir� al�atoirement, mais je sais pas s'il est valide.

    -----

    Une fois fini, tu parcours ton vecteur dans l'ordre, sans retirer d'�l�ments.

  12. #12
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par d�faut
    Citation Envoy� par Luc Hermitte
    Pourquoi tu manipules une liste avec des indices ? Ce n'est pas fait pour.
    Bah je ne sais pas trop quoi utiliser d'autre parce que dans le cas d'un tableau j'aurais des cases vides contrairement � une liste cha�n�e.
    Si t'as d'autre chose � me proposer c'est le bienvenue.
    J'avais dans l'id�e de faire ce que je veux avec une liste mais si ce n'est pas bon.
    Je suis ouvert.

    Sinon, HanLee nan je ne veux pas faire une permutation.
    Ma liste (tableau, vector, vous l'appelez comme vous voulez) va contenir toutes les positions (struct) libres dans une matrice. Ensuite, je tire al�atoirement une position dans la liste (ou ...) d'apr�s son indice (c'est le chiffre tir� al�atoirement). Puis, je l'enl�ve de la liste pour ne pas le retirer. Et ainsi de suite jusqu'� ce que j'ai tir� toutes mes positions dont j'ai besoin.

  13. #13
    Membre �m�rite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par d�faut
    Oui, et �a revient au m�me que de tout arranger al�atoirement, et de parcourir le vecteur s�quentiellement regarde bien !

    Le fait de parcourir ton vecteur dans s�quentiellement, c'est comme si tu retirais l'�l�ment de la liste. Une fois derri�re, c'est derri�re, et il ne sera plus devant.

    Tirer un indice au pif, c'est la m�me chose que prendre une valeur au pif, vu de l'autre c�t�.

  14. #14
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par d�faut
    Citation Envoy� par HanLee
    Oui, et �a revient au m�me que de tout arranger al�atoirement, et de parcourir le vecteur s�quentiellement regarde bien !

    Le fait de parcourir ton vecteur dans s�quentiellement, c'est comme si tu retirais l'�l�ment de la liste. Une fois derri�re, c'est derri�re, et il ne sera plus devant.

    Tirer un indice au pif, c'est la m�me chose que prendre une valeur au pif, vu de l'autre c�t�.
    Bah en fait nan, �a ne correspond pas tout � fait � ce que j'ai besoin. Puisque lors de chaque simulation lanc�e des cases de ma matrice peuvent �tre ocupp�es puis lib�r�es et re-occup�es et ... Ma liste contient toutes les positions libres au d�part (toute la matrice). Ensuite, dans ma liste il faut que je puisse supprimer les positions occup�es et par contre ajouter les positions qui redeviennet libres.

Discussions similaires

  1. R�ponses: 9
    Dernier message: 25/08/2009, 13h31
  2. Equivalent de Jfreechart [Java] en VB.net
    Par guandal dans le forum VB.NET
    R�ponses: 2
    Dernier message: 31/01/2007, 10h47
  3. Equivalent de ByteBuffer (Java) en C#
    Par vandamme dans le forum C#
    R�ponses: 2
    Dernier message: 23/01/2007, 21h34
  4. [Info]equivalent chdir en java
    Par man4surfs dans le forum API standards et tierces
    R�ponses: 8
    Dernier message: 18/07/2005, 09h41
  5. [C#] Equivalence des API java en C# en ligne
    Par totoranky dans le forum Windows Forms
    R�ponses: 6
    Dernier message: 15/02/2005, 01h16

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