Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [C++] liste stl...

  1. #1
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453

    [C++] liste stl...

    ciao a tutti...

    un dubbietto: sto iniziando ad usare la standard template library, in particolare il dubbio è su <list>.

    Ho letto che su iteratori relativi a list sono definiti operatore prefisso e post fisso, mentre non è definito l'operator+() e l'operator-().. A me interessa poter incrementare di due un iteratore.

    Sapete consigliarmi un modo più elegante che fare i++; i++;? ho provato con i++++ ma non sapendo bene che cosa restituisce il primo operatore postfisso non saprei, ed inoltre non funziona nel mio progetto (che essendo un po' intricato non mi permettere di capire bene come funziona sta storia)..

    Un'ultimo problema, più scemo e prettamente di forma..

    Ho una funzione che deve incrementare di due una variabile intera che si chiama busy_registry, ma deve restituirla prima dell'incremento... return busy_registry++++ non funziona a dovere (il secondo incremento viene fatto su una copia per valore di busy_registry, e non incrementa la variabile effettiva). Ho risolto con una variabile di appoggio come segue:

    Codice PHP:
    int this_registry busyRegistry;
    busyRegistry +=2;
    return 
    this_registry
    sapreste indicarmi un modo più elegante? grazie!

  2. #2

    Re: [C++] liste stl...

    per il secondo meglio:
    Codice PHP:
    const int this_registry busyRegistry;
    busyRegistry +=2;
    return 
    this_registry

  3. #3
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    C'è la funzione advance() che fa al caso tuo.
    Esempio:
    codice:
    #include <iterator> // si trova qui
    #include <list>
    #include <iostream>
    using namespace std;
    int main(){
    
    	list<int> pippo;
    	pippo.push_back(10);
    	pippo.push_back(20);
    	pippo.push_back(30);
    	pippo.push_back(40);
    	pippo.push_back(50);
    
    	list<int>::iterator iter = pippo.begin();
    
    	cout << *iter << endl;
    	advance(iter,2);
    	cout << *iter << endl;
    	advance(iter,2);
    	cout << *iter << endl;
            return 0;
    }

  4. #4
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    utilissima, ma ce n'è una che ritorni l'iteratore dopo l'incremento? nel caso non è un problema e lo faccio io, ma se ci fosse già fatta...

    vi ringrazio cmq!

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Intendi che faccia qualcosa come il codice che ha MacApp in quote?
    Non mi risulta. Tra l'altro lo stesso operatore di incremento postfisso è fatto più o meno nello stesso modo.

  6. #6
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    beh intendo che invece di essere void, ritorni l'iteratore incrementato...!

  7. #7
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Dopo l'advance(), l'iteratore passato è incrementato. A che ti serve restituirlo come parametro di ritorno di una funzione?

  8. #8
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    ho capito che è incrementato, ma se ti dico così è perchè mi serve all'interno di un'altra funzione che mi sia ritornato l'iteratore! Comunque no problem, ho aggiustato una mia funzione usando la advance e fa quel che deve, vi ringrazio tutti..

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.