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 :

[C++14] Les it�rateurs


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre tr�s actif
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Mai 2014
    Messages
    227
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Mai 2014
    Messages : 227
    Par d�faut [C++14] Les it�rateurs
    Bonjour � tous , je suis acctuellement entrain de cr�� un petit jeu et j'en suis dans la partie application des texture sur des entit�s.
    Donc j'ai dans mon main ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    std::map<std::string,sf::Texture> globalTexture;
    std::vector<std::unique_ptr<Entity>> globalEntity;
    Et pour appliquer les texture j'ai essayer ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void addMobs( std::string name, std::vector<std::unique_ptr<Entity>> &v_entity, std::map<std::string,sf::Texture> const &m_texture )
    {
        for(m_texture::/*const_*/iterator it=m_texture.begin() ; it!=m_texture.end() ; ++it)
        {
            if ( *it.first == name );
            {
                auto e = std::make_unique<Entity>( *it.second, sf::Vector2f(100,100) );
                v_entity.push_back( std::move(e) );
            }
        }
    }
    Mais le probl�me et que �a ne fonctionne pas car je m'y connais pas trop avec les it�rateur x).
    J'ai ces deux erreurs :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    B:\Workspace\C++\Gravity\Function.cpp|12|error: 'm_texture' is not a class, namespace, or enumeration|
    B:\Workspace\C++\Gravity\Function.cpp|12|error: 'it' was not declared in this scope|
    J'avais pourtant vu ce code " for(m_texture::/*const_*/iterator it=m_texture.begin() ; it!=m_texture.end() ; ++it)" dans un exemple d'un post sur le forum, mais �a n'as pas l'aire de fonctionn� chez moi x)
    Quelqu'un peux m'aider ?
    Merci ^^

  2. #2
    Membre �prouv�
    Homme Profil pro
    sans activit�
    Inscrit en
    Janvier 2016
    Messages
    76
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : sans activit�

    Informations forums :
    Inscription : Janvier 2016
    Messages : 76
    Par d�faut
    Bonjour Disixlis,

    le m_texture::iterator est �tonnant, je ne dis pas qu'il est faux mais... est faux. (merci VivienD)

    Essaie avec std::map<std::string,sf::Texture>::iterator ou encore plus simple auto
    sinon, au lieu de faire *it.first fais plut�t it->first
    Edit:

    Tu peux aussi remplacer ta boucle par :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    auto it = m_texture.find(name);
    if(it != m_texture.end())
    {
                auto e = std::make_unique<Entity>( it->second, sf::Vector2f(100,100) );
                v_entity.push_back( std::move(e) );
     }

  3. #3
    Membre �clair�
    Avatar de VivienD
    Homme Profil pro
    D�veloppeur logiciel
    Inscrit en
    Octobre 2009
    Messages
    523
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : Allemagne

    Informations professionnelles :
    Activit� : D�veloppeur logiciel
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 523
    Par d�faut
    Citation Envoy� par rnr72 Voir le message
    [...]

    le m_texture::iterator est �tonnant, je ne dis pas qu'il est faut mais...

    [...]
    m_texture::iterator est faux, techniquement. Pour r�cup�rer le type-membre iterator de n'importe quel conteneur de la classe container, il faut �crire container::iterator, quoi qu'il advienne. Naturellement, dans le cas pr�sent, on peut aussi �crire auto it = m_texture.begin().

  4. #4
    Membre �prouv�
    Homme Profil pro
    sans activit�
    Inscrit en
    Janvier 2016
    Messages
    76
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : sans activit�

    Informations forums :
    Inscription : Janvier 2016
    Messages : 76
    Par d�faut
    VivienD, nous sommes d'accord.

    Merci de confirmer ce que je pensais.

  5. #5
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    L'�criture vraiment correcte serait for(const auto& el : m_textures) enfin l� vu qu'on cherche une cl� dans une map, qui est forc�ment unique, un find serait encore mieux.
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  6. #6
    Membre tr�s actif
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Mai 2014
    Messages
    227
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Mai 2014
    Messages : 227
    Par d�faut
    Merci � vous ! �a fonctionne ^^

  7. #7
    Membre �clair�
    Avatar de VivienD
    Homme Profil pro
    D�veloppeur logiciel
    Inscrit en
    Octobre 2009
    Messages
    523
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : Allemagne

    Informations professionnelles :
    Activit� : D�veloppeur logiciel
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 523
    Par d�faut
    Citation Envoy� par rnr72 Voir le message
    VivienD, nous sommes d'accord.

    Merci de confirmer ce que je pensais.
    Citation Envoy� par Disixlis Voir le message
    Merci � vous ! �a fonctionne ^^
    Il n'y a pas de quoi.

  8. #8
    Membre �prouv�
    Inscrit en
    Mai 2012
    Messages
    65
    D�tails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 65
    Par d�faut
    Comme l'a mentionn� Bousk, il est meilleur de faire un find, plut�t qu'une boucle for, car avec un find t'as une recherche en log(N), tandis qu'avec ton for, ta recherche se fait O(N), sans compter les probl�mes de caches d� aux pointeurs dans la map.

    Tu peux �crire ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //En mettant const std::string &, c'est mieux, on évite les recopie inutile
    void addMobs(const std::string & name, std::vector<std::unique_ptr<Entity>> &v_entity, std::map<std::string,sf::Texture> const &m_texture )
    {
        std::map<std::string,sf::Texture>::const_iterator it = m_texture.find(name);
        //Mieux
        //auto it = m_texture.find(name);
     
        if(it != m_texture.end())
            v_entity.emplace_back(std::make_unique<Entity>(it->second, sf::Vector2f(100, 100);
    }
    Il est meilleur de faire un emplace_back, on �vite un d�placement, ton unique_ptr sera construit sur place dans ton vector.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Aide sur les it�rateurs
    Par Baquardie dans le forum C#
    R�ponses: 1
    Dernier message: 23/04/2008, 22h04
  2. Comment utiliser les it�rateurs de flux ?
    Par CedricMocquillon dans le forum SL & STL
    R�ponses: 7
    Dernier message: 10/05/2007, 09h09
  3. [C#]Les It�rateurs en .Net
    Par loverdose dans le forum C#
    R�ponses: 4
    Dernier message: 02/05/2007, 14h42
  4. Copies de flots en passant par les it�rateurs
    Par Christophe Brun dans le forum C++
    R�ponses: 7
    Dernier message: 02/07/2003, 11h41

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