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 :

[Ogre] Problème sur un vecteur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 2
    Par défaut [Ogre] Problème sur un vecteur
    je passe par le meme problème ([EDIT] que celui-ci[/EDIT])
    j'ai mon vector :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<Ogre::Entity*> entity;

    et dans le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    entity[i]=(entité);
    nodeEntity[i] = nodesEntity->createChildSceneNode(nom);
    nodeEntity[i]->attachObject(entity[i]);

    même sans utiliser les itérateurs ....
    le programme fait un bug sans un problème de compilation

    mais si , je déclare au lieu de vector un tableau ça marche !
    c'est bizarre

    est ce que vous avez trouvé une solution pour votre problème ?
    si oui , comment vous avez fait ?
    j'ai besoin d'utiliser le vector et non un tableau

  2. #2
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Ton code m'apparait incorrecte:

    entity[i]=(entité);
    Ca ne peut marcher que si la entity.size() > i. std::vector ne va pas grossir automatiquement si tu fais comme ça.

    Si tu as besoin que le vector soit à une taille précise dés le départ, utilise entity.resize().
    Si tu ne fais qu'ajouter des éléments a entity, utilise entity.push_back() (ou emplace_back() avec C++11).
    Si tu utilises push_back()/emplace_back() et que tu connais déjà le nombre d'éléments maximum dans entity au cours de son utilisation, fais un entity.reserve( maxumum_count); dés sa création.

    Il n'y a que les conteneurs associatifs (std::map, std::unordered, std::multimap) qui permettent de créer un élément dans le conteneur via une association. les séquences, std::vector, std::list, etc. ne le permettent pas.

  3. #3
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    mais si , je déclare au lieu de vector un tableau ça marche !
    J'en doute.

    Si tu déclares un tableau, tu dois donner une taille dés le départ non?
    Dans ce cas tu ne comprends pas l'interet de std::vector. Vois les recommandations que je viens de faire au dessus si tu connais déjà la taille maximale de ton tableau.

    Si tu as déclaré le tableau sans lui donner une taille fixe, alors c'est que tu est en train de manipuler de la mémoire hors du tableau... donc en gros c'est un gros bug. Le problème principal avec les tableaux "nus" ou "brute" c'est que si tu fais n'importe quoi avec ils ne vont pas te dire qu'il y a un probleme la plupart du temps. Donc évite les.

    Au pire, si tu veux vraiment utiliser un tableau fixe, avec une taille définie à la compilation, utilise std::array (ou boost::array) au lieu d'un vector.

    Le vector est fait pour s'auto gérer parcequ'il a une taille qui change au cours de l'execution (même si tu fixe la mémoire qu'il va utiliser en utilisant reserve() ).
    Le std::array est un array mais avec des protections de manière à (la plupart du temps) avoir des erreurs si tu fais des manipulations hors du tableau. Par contre ça suppose que tu connais sa taille à la compilation, pas à l'execution.

    Je te conseil de lire un ou deux livres sur les contenrus C++. Une fois fais tu pourras mieu comprendre ce que tu fais avec. C'est pas forcément évident avant d'avoir lu des références dessus.

Discussions similaires

  1. Réponses: 10
    Dernier message: 02/12/2007, 00h13
  2. [Struts] Problème pour itérer sur un vecteur
    Par vallica dans le forum Struts 1
    Réponses: 5
    Dernier message: 24/04/2006, 15h45
  3. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45
  4. problème sur une requête!!!!!
    Par Mcgrady_01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2003, 01h17
  5. Zoom sur des vecteurs ou lignes
    Par mat.M dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 25/11/2002, 10h40

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