Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [c++ stl]erase

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++ stl]erase

    ciao.
    sto tentando di cancellare l'ultimo elemento di una mappa stl:
    std::map<std::string,CBone*> m_MapBones;
    ho provato con:
    m_MapBones.erase(m_MapBones.end());
    ma non ci sono riuscito , la mappa non è nulla e l'errore è


    map/set erase iterator outside range


    , al che ho provato con:
    m_MapBones.erase(m_MapBones.end()-1);

    e il compilatore mi da questi errori:
    Error 13 error C2676: binary '-' : 'std::_Tree<_Traits>::iterator' does not define this operator or a conversion to a type acceptable to the predefined operator c:\programmazione\old2\old\wild magic 4\geometrictools\wildmagic4\samplegraphics\materia ltextures\skeleton.cpp 125

    e questo:
    Error 1 error C2784: 'reverse_iterator<_RanIt>::difference_type std:perator -(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)' : could not deduce template argument for 'const std::reverse_iterator<_RanIt> &' from 'std::_Tree<_Traits>::iterator' c:\programmazione\old2\old\wild magic 4\geometrictools\wildmagic4\samplegraphics\materia ltextures\skeleton.cpp 125

    come si fa?
    grazie.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Prova con:
    m_MapBones.erase(m_MapBones.rbegin());

    Per la cronaca, un iterator end() non da l'ultimo elemento, ma una locazione successiva all'ultimo elemento utile solo come stopper.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    e perchè mi da errore con end()-1?
    com è che posso usare i valori?

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    La map usa i bidirectional_iterator che non possono essere spostati a piacimento come i random_iterator.
    Possono essere spostati avanti o indietro solo con ++ o --

    Per ottenere un iteratore a piacimento, si usa std::advance();
    codice:
    m_MapBones.erase(
        std::advance(m_MapBones.begin(), m_MapBones.size()-1)
    );
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.