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 :

size() d'un vector/deque/list sur une seule dimension


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 12
    Par défaut size() d'un vector/deque/list sur une seule dimension
    Bonjour @ tous,

    J'ai un petit problème pratique sur un deque (ou un vector, ici ça ne change rien (si ?))) multidimensionnel dont je voudrais connaître la taille sur une seule dimension.

    Imaginez que j'ai un vector deux dimensions tableau[l][k], donc avec des lignes et des colonnes pas forcément de la même taille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector< vector<int> > tableau;
    Si on utilise la méthode size(), elle nous renvoie le nombre d'éléments total, à savoir ici nombre_de_lignes*nombre_de_colonnes). Or j'aimerais accéder à un seul de ces deux paramètres, par exemple ici juste le nombre de colonnes de la deuxième ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbCol2 = tableau[1].size();
    Mais ceci renvoi en fait le nombre d'éléments de la ligne 1 + celui de la ligne 0... en généralisant, size() renvoie le nombre total d'éléments précédents.

    Quelle est la procédure à suivre ?

    Merci par avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut
    Bonjour,

    Ca va peut être parraître un peu stupide, mais as-tu essayé de faire ca ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nbCol2 = tableau[1].size() - tableau[0].size();
    Et de manière générale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nbCol2 = tableau[i].size() - tableau[i-1].size();
    pour avoir le nombre d'éléments de la ligne 'i' en particulier...

    C'est simple mais ca peut régler ton problème peut-être non ?

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    size ne te renverra que le nombre d'éléments d'un vector.

    Donc tableau.size() sera le nombre de "lignes"

    tableau[0].size() le nombre de "colonnes" pour cette "ligne".

  4. #4
    Membre éprouvé Avatar de nowahn
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 84
    Par défaut
    Bonjour,

    Citation Envoyé par Biotik
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    nbCol2 = tableau[1].size();

    Mais ceci renvoi en fait le nombre d'éléments de la ligne 1 + celui de la ligne 0... en généralisant, size() renvoie le nombre total d'éléments précédents.
    Tu es sûr de toi ? Chez moi, le code suivant :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // ...
       vector<vector<int> > Vector;
       for(int i=0; i<3; ++i)
          Vector.push_back(vector<int>());
       Vector[0]=vector<int>(5);
       Vector[1]=vector<int>(7);
       Vector[2]=vector<int>(9);
     
       cout << "Vector.size() : " << Vector.size() << '\n';
       for(int i=0; i<3; ++i)
          cout << "Vector[" << i << "].size() : " << Vector[i].size() << '\n';
    // ...
    me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Vector.size() : 3
    Vector[0].size() : 5
    Vector[1].size() : 7
    Vector[2].size() : 9
    Chaque vecteur membre du premier vecteur donne sa taille (et d’ailleurs, size() n’a pas les moyens de récupérer la taille des autres vecteurs).

  5. #5
    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, et bienvenue sur le forum

    La question un peu idiote qui me vient à l'esprit est: ne pourrais tu pas envisager (si toutes les lignes ont le même nombre de colonnes) de gérer ton tableau de tableau comme un unique tableau de (nombre de lignes * nombre de colonnes) et de l'encapsuler dans une classe qui fournirait, entre autres, une fonction membre prenant en paramètre la ligne et la colonne et renvoyant... l'objet contenu

    Je m'explique:

    Lorsque tu as un tableau à deux dimensions, et que pour chaque ligne tu as un nombre identique de colonne, tu es d'accord que tu place en réalité (nombre de lignes) fois (nombre de colonnes) dans ton tableau.

    En appliquant la formule (position ligne * nombre colonnes + position colonne), tu peux donc assez facilement... récupérer l'élément qui se trouve à la ligne (position ligne) et à la colonne (position colonne).

    La valeur renvoyée par la fonction size() de la classe vector correspondrait donc, fatalement, au nombre total d'éléments du tableau, et donc, au produit du nombre de colonnes par le nombre de lignes.

    Il y a, cependant, deux contraintes à prendre en compte dans ce raisonnement trop idyllique

    La première est que... chaque ligne doit être composée du même nombre d'éléments.

    La deuxième est la difficulté que l'on pourrait éprouver à... redimensionner ce tableau:

    L'ajout d'une ligne ne serait certes pas bien compliqué (il "suffirait" de rajouter (nombre de colonnes) éléments dans le tableau ), mais l'ajout d'une colonne peut s'avérer beaucoup plus complexe

    Mais, peut-être serait il intéressant de réfléchir à cette possibilité, non
    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

  6. #6
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 12
    Par défaut
    Citation Envoyé par nowahn Voir le message
    Bonjour,



    Tu es sûr de toi ? Chez moi, le code suivant :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // ...
       vector<vector<int> > Vector;
       for(int i=0; i<3; ++i)
          Vector.push_back(vector<int>());
       Vector[0]=vector<int>(5);
       Vector[1]=vector<int>(7);
       Vector[2]=vector<int>(9);
     
       cout << "Vector.size() : " << Vector.size() << '\n';
       for(int i=0; i<3; ++i)
          cout << "Vector[" << i << "].size() : " << Vector[i].size() << '\n';
    // ...
    me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Vector.size() : 3
    Vector[0].size() : 5
    Vector[1].size() : 7
    Vector[2].size() : 9
    Chaque vecteur membre du premier vecteur donne sa taille (et d’ailleurs, size() n’a pas les moyens de récupérer la taille des autres vecteurs).
    Effectivement c'était simplement une erreur de code de ma part... en fait je faisais une boucle avec un push_back de la ligne que je ne réinitialisais pas : d'où l'erreur stupide, un simple vector[i].size() fonctionne !! 0_o

    En tout cas merci beaucoup pour vos réponses, et désolé pour ceux que j'ai mis sur la mauvaise route et ai fait creuser pour rien... (ça partait sur des trucs bien trop compliqués pour moi ^^)

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

Discussions similaires

  1. [SP-2007] Plusieurs listes sur une seule page
    Par merlinus3000 dans le forum SharePoint
    Réponses: 2
    Dernier message: 21/03/2012, 15h31
  2. [Pentaho] getValueAt sur une seule dimension
    Par Palsajicoco dans le forum Bibliothèques & Frameworks
    Réponses: 5
    Dernier message: 06/04/2011, 18h21
  3. resultat list sur une seule ligne ?
    Par champion dans le forum JSF
    Réponses: 4
    Dernier message: 14/04/2008, 21h34
  4. faire appel à une liste sur une autre feuille
    Par vatsyayana dans le forum Excel
    Réponses: 2
    Dernier message: 16/11/2007, 20h23
  5. difference entre vector, deque, list et tableau
    Par salseropom dans le forum SL & STL
    Réponses: 8
    Dernier message: 03/01/2005, 13h35

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