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 :

Tableau dynamique : Initialisation et vérification


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 112
    Par défaut Tableau dynamique : Initialisation et vérification
    Bonjour,




    Je cherche à initialiser le plus vite possible un tableau mais :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int *tableau = NULL;
     
    int taille = 10;
     
    tableau = new int[taille];

    Avec ce code, les valeurs du tableau ne sont pas à zéro.


    Existe-t-il une autre solution que de l'initialiser avec une boucle ?

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int i = 0 ; i < taille ; i++)
    {
        tableau[i] = 0;
    }




    Et peut-on utiliser la même vérification qu'en C pour prévoir l'échec ?

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (tableau == NULL) 
    {
        cout << "Memoire insuffisante" << endl;
        delete[] tableau;
     
        system("pause");
    }

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Nikolas Voir le message
    Existe-t-il une autre solution que de l'initialiser avec une boucle ?

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int i = 0 ; i < taille ; i++)
    {
        tableau[i] = 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #include <algorithm>
     
    std::fill_n(tableau, taille, 0);
    std::fill(tableau, tableau+taille, 0);
    Note qu'on aura tendance à utiliser des std::vector plutôt que ce genre de tableaux.

    Et peut-on utiliser la même vérification qu'en C pour prévoir l'échec ?
    Si new échoue, il y a une exception qui est lancée.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 112
    Par défaut
    Quelle différence entre std::fill_n() et std::fill() ?


    Si new échoue, il y a une exception qui est lancée.
    C'est-à-dire ? comment je fais pour lancer le message d'erreur à l'utilisateur ?

  4. #4
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Nikolas Voir le message
    Quelle différence entre std::fill_n() et std::fill() ?
    Les arguments. fill_n prend un nombre, fill un itérateur de fin.

    C'est-à-dire ? comment je fais pour lancer le message d'erreur à l'utilisateur ?
    Tu apprends à te servir des exceptions.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 112
    Par défaut
    En langage humain, je comprends que fill modifie les valeurs du tableau en une fois et fill_n revient à utiliser une boucle.


    Et concrètement, je ne vois pas comment on fait avec une exception, quant à l'explication sur la FAQ, ça fait plus m'embrouiller que m'aider.



    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (tableau == NULL) 
    {
        cout << "Memoire insuffisante" << endl;
        delete[] tableau;
     
        system("pause");
    }
    Ce code là est donc inutile ?


    Mon programme plante et j'ai exclu la possibilité que ça vienne d'une mauvaise allocation mais si cette condition ne sert à rien alors je ne peux plus m'y fier et j'en suis heureux...

    Tellement heureux que je devrais buter le chien du voisin pour calmer ma joie, je crois bien.

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Nikolas Voir le message
    En langage humain, je comprends que fill modifie les valeurs du tableau en une fois et fill_n revient à utiliser une boucle.
    Les deux reviennent plus ou moins à utiliser une boucle.

    Et concrètement, je ne vois pas comment on fait avec une exception, quant à l'explication sur la FAQ, ça fait plus m'embrouiller que m'aider.
    La FAQ n'est pas un cours ni un bouquin destiné aux débutants.

    Ce code là est donc inutile ?
    new ne retourne jamais NULL.

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/11/2011, 10h41
  2. Initialisation d'un tableau dynamique
    Par TheBombadil dans le forum Débuter
    Réponses: 2
    Dernier message: 13/11/2010, 11h44
  3. initialisation tableau dynamique
    Par mikew75 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 17/11/2008, 13h06
  4. [Tableau] Initialisation d'un tableau dynamique
    Par Rayek dans le forum Langage
    Réponses: 4
    Dernier message: 28/11/2007, 08h24
  5. Initialisation tableau dynamique
    Par exyacc dans le forum Delphi
    Réponses: 16
    Dernier message: 18/06/2007, 11h57

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