Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [c++stl]semplice ciclo

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

    [c++stl]semplice ciclo

    ciao.

    codice:
    for( IteratorAll = m_pMapAll->begin();IteratorAll != m_pMapAll->end(); IteratorAll++)
    		if(m_pMapCurrent->find(IteratorAll->first) == m_pMapCurrent->end()){
    			m_pVectorDel->push_back(IteratorAll->second);
    			(*m_pMapAll).erase(IteratorAll);
    		}
    ho il solito problema che togliendo un elemento dinamicamente usando gli iteratori non cè piu coerenza nei cicli(almeno penso)

    qui quando m_pMapAll è = 1 lemento se lo tolgo quando riparte

    for( IteratorAll = m_pMapAll->begin();IteratorAll != m_pMapAll->end(); IteratorAll++)

    da un errore.
    come si fa?
    grazie.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Non puoi cancellare un iteratore dalla mappa e pretendere che rimanga valido.
    Devi ricalcolarlo se lo cancelli.
    codice:
    for( IteratorAll = m_pMapAll->begin();IteratorAll != m_pMapAll->end(); ++IteratorAll)
    	if(m_pMapCurrent->find(IteratorAll->first) == m_pMapCurrent->end()){
    		m_pVectorDel->push_back(IteratorAll->second);
    		m_pMapAll->erase(IteratorAll);
                    IteratorAll = m_pMapAll->begin(); 		
    	}
    }
    P.S.
    Abituati a usare gli operatore prefissi con gli iteratori. Sono più veloci.
    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
    scusa shodan , ma non mi funziona , ho provato in mille modi , quando resetto l'iteratore al begin della mappa al reiniziare del ciclo mi da errore

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Modifica così:
    codice:
    	map<>::iterator IteratorAll = m_pMapAll->begin();
    	do {
    		if(m_pMapCurrent->find(IteratorAll->first) == m_pMapCurrent->end()){
    			m_pVectorDel->push_back(IteratorAll->second);
    			m_pMapAll->erase(IteratorAll);
                IteratorAll = m_pMapAll->begin();
    		} else {
    			++IteratorAll;
    		}
    	} while (IteratorAll != m_pMapAll->end());
    Se ti da ancora errori, hai qualche altro problema nel codice.
    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 © 2026 vBulletin Solutions, Inc. All rights reserved.