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 :

Syntaxe des pointeurs


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 10
    Par défaut syntaxe des pointeurs
    Bonjour ... j'suis nouveau ici et j'suis en licence informatique ...

    Je vais presenter mon soucis....

    donc pour les tableau normal de type entier (int tab[10]) par exemple on peut affecter des valeurs sans faire de boucle d'iteration qui affecte chaque case du tableau ...

    exemple: int tab[3] = {1,2,3};

    ce qui est plus lisible a ecrire !!

    mon probleme dans mon programme j'utilise pas de tableau mais un pointeur que je déclare comme suit ..

    int* tableau=new int[10];

    et lorsque je veux faire comme les tableaux normal style :

    tableau={1,2,3,4,5,6,7,8,9,10};
    ca me met une erreur .. et je cherche et je cherche sans trouver la bonne syntax pour affecter ces valeures comme pour les tableaux normal ..

    J'espere que qqun aura la gentillesse de me répondre en esperant qu'on comprenne mon probleme .. si vous voulez de plus amples informations sur mon cas j'suis là pour vous les donner ...
    Mon probleme en fait c'est la syntaxe pour affecter ces valeures facilement ..
    et si qqun me dit qu'il n'yen a pas je saurai qu'il faudra faire de boucle .. mais imaginer que je veux pas mettre de chiffre croissant comment je fais

    cordialement un informaticien en herbe ..

  2. #2
    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
    Pas de solution miracle, au pire tu peux initialiser un tableau statique avec tes valeurs puis le recopier dans ton tableau dynamique avec un std::copy.

    Tu peux aussi utiliser boost::assign j'imagine, qui permet de remplir différents conteneurs directement.

    Au fait, utilise std::vector pour ton tableau dynamique

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 10
    Par défaut
    oook je vois ce que vous voulez dire ..

    je déclare un tableau fictif avec les valeurs que je veux mettre ..

    et ensuite j'assigne ces valeurs dans mon tableau dynamique .. okok!

    j'utilise comme on m'apprend avec using namespace std;
    ce qui evite de marquer "std::"
    et de plus a la fac on nous apprends pas trop ce que font les fonctions des biblio c'est plus apprendre a faire des algorithmes .. donc boost::assign et std::copy je connais pas

    et pour ma part j'ai jamais vu en cours que pour mon tableau dynamique je dois utilser std::vector ! peut etre que j'en ai pas besoin dans le cas ou j'suis

    si cela ne vous dérange pas comment j'utilise std::copy ou boost::assign ?
    avec cette exemple :


    //tableau que je veux remplir avec tab
    int* tableau=new int[4];

    //tableau a recopier dans tableau
    int tab[4]={11,34,5,5};

    j'suis désolé ! mais mon seule probleme c'est la syntaxe et non pas un probleme d'idée car les idée j'ai que ca dans la tete

    merci pour votre réponse Monsieur !

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

    Informations professionnelles :
    Activité : aucun

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

    Les tableaux "C style" (ea: int tab[10]) peuvent facilement etre considéré comme pointeurs, mais n'en sont à vrai dire pas...

    Si donc, tu déclares un pointeur sur entiers, et que tu fais l'allocation dynamique pour (mettons) 10 éléments, tu n'as que trois solutions pour fournir une valeur aux différents éléments:
    • fournir la valeur d'un élément directement (ea: tab[0]=12)
    • copier les valeurs d'un autre endroit
    • (découle directement de la première solution) utiliser une boucle pour remplir les valeurs
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      for(unsigned int i=0;i<10;i++)
      {
          tab[i]=1;
      }
    ]Ceci dit, ainsi que l'a signalé Laurent, en C++, il est très largement conseillé d'utiliser plutot les conteneurs de la STL (ou ceux de boost)plutôt que de vouloir gérer la mémoire "à la main"...

    La raison tient en peu de mots: facilité et sécurité...

    Ainsi, un tableau "C style" serat avantageusement remplacé par un std::vector<type> (ou une std::string, s'il s'agit d'un tableau de caractère représentant... une chaine de caractère) et travaillera exactement de la meme manière que le tableau d'origine, à ceci près qu'il connaitra sa taille, et qu'il se chargera lui-meme d'allouer la mémoire en suffisance:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    std::vector<int> tab(10);//déclare un vector contenant d'office 10 éléments
     //fournit une valeur à tous les éléments
    for(unsigned int i=0;i<10;i++)
        tab[i]=i;
    //pour afficher les éléments sans connaitre la taille
    for(unsigned int i=0;i<tab.size();i++)
        std::cout<<tab[i]<<std::endl;
    //pour supprimer un élément du tableau (mettons le troisième)
    tab.erase(tab.begin()+2);//tab.begin() pointe sur l'élément index 0;)
    //pour rajouter un élément en fin de tableau
    tab.push_back(25);
    // pour rajouter un élément en début de tableau
    tab.push_front(2);
    // pour rajouter un élément avant le deuxième (entre tab[0]et tab[1])
    tab.insert(tab.begin()+1,33);
    //pour créer la copie conforme d'un tableau
    std::vector<int> tab2(tab);//tab2 contient les trois valeurs de tab1 ;)
    //pour ajouter les valeur d'un tableau dans un autre
    tab2.insert(tab2.begin(),tab1.begin(),tab1.end());//ajoute, le contenu de
                                                      // tab1 au début de tab2 ;)
    // on peut meme effacer une partie du tableau
    // (ici, on efface les éléments  aux index 2,3,4 et5)
    tab2.erase(tab2.begin()+1,tab2.begin()+4);
    //savoir la taille du tableau
    std::cout<<tab2.size()<<std::endl;
    // pour vider le tableau
    tab.clear();
    //j'en passe, et de meilleures ;)
    Tu remarqueras que tout a été fait sans que l'on aie à se soucier d'une manière ou d'un autre d'allouer de la mémoire pour les différents éléments ...Evidemment, cela va nécessiter de prendre quelques minutes pour connaitres les différentes fonctions membre... mais l'investissement en temps est TRES rentable (tu pourras trouver la doc sur les vector, entre autres, ==>ici (en anglais)<==)
    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

  5. #5
    Membre éclairé Avatar de femtosa
    Inscrit en
    Juin 2002
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 253
    Par défaut
    Citation Envoyé par tajy34
    //tableau que je veux remplir avec tab
    int* tableau=new int[4];

    //tableau a recopier dans tableau
    int tab[4]={11,34,5,5};
    Et un simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tab[0] = 11;
    tab[1] = 34;
    tab[2] = 5;
    tab[3] = 5
    ne fonctionne-t-il pas ... ?

    [EDIT]Grillé! [/EDIT]

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 10
    Par défaut
    ta syntaxe est correcte

    mais pour affecter des valeures a un tableau statique ma maniere est bonne aussi ...

    ma question a été s'il exister une syntax identique pour les tableau dynamique

    et apparement non
    on m'a suggérer de creer un tableau statique en rentrant les valeurs tel que je fais
    ex : tab[3]={1,2,3}
    syntax correcte ...
    et ensuite on me dit qu'il faut que je copie ces valeures dans mon tableau dynamique
    et comme je sais pas utiliser les std::copy et boost::assigne et bien j'ai fais une fonction dans mon programme qui prend en parametre le tableau statique, le tableau dynamique et la taille du tableau

    ce qui me donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    void copie(int* tab1, int tab2[],int taille)
    {
      for(int i=0;i<taille;i++)
        {
          tab1[i]=tab2[i];
        }
    }
     
     
    //pour l'application il suffit de faire cela:
     
    //valeur que je veux dans mon tableau dynamique 
    int tab1[10]={9,1,2,3,4,5,6,7,8,9};
     
    //je declare mon tableau dynamique
    int* tab2=new int [10];
     
    //et je copie tout simplement :D
    copie(tab1,tab2,10);
    voilà voilà ... mon probleme resolu !! merci LAURENT

    et merci KOALA pour le assign

  7. #7
    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
    Question : pourquoi un tableau dynamique alors que tu connais la taille et toutes les valeurs à l'avance

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

Discussions similaires

  1. [LG] Comprendre mieux le principe des pointeurs
    Par maind5or dans le forum Langage
    Réponses: 4
    Dernier message: 04/10/2005, 01h06
  2. Probleme avec des pointeurs...
    Par barucca dans le forum C++
    Réponses: 5
    Dernier message: 23/08/2005, 21h05
  3. Libérer des pointeurs dans une std::map
    Par GaldorSP dans le forum SL & STL
    Réponses: 2
    Dernier message: 09/07/2005, 14h42
  4. à propos des pointeurs
    Par salseropom dans le forum C++
    Réponses: 20
    Dernier message: 24/03/2005, 09h37
  5. vive la syntaxe des languages !
    Par D@rKness74 dans le forum Windows
    Réponses: 2
    Dernier message: 15/09/2004, 13h56

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