Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [c++ stl]Range

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

    [c++ stl]Range

    ciao.
    MI chiedevo se in stl fosse presente un tipo range per definire appunto una parte di un insieme(di un container), ho visto che esistono funzioni tipo la count_if o la find_if.
    Per esempio se volessi fare il sort di un container stl da 0 a 10 e da 14 a 25 saltando 11,12 e 13 come posso fare?
    queste funzioni tipo la find_if che parametri accettano e come possono essere concatenati(scusate se sparo).
    se non si puo questo aggiungo che nel vector che devo ordinare e per cui ho creato una classe comparer a cui arrivano due CEntity(che è la classe base del tipo contenuto dal vector che devo ordinare)ho accesso per ogni variabile centity a una funzione bool IsSelected() che mi dice se l'entità è selezionata o meno.
    SI puo automatizzare in una qualche maniera e fare il sort solo per gli oggetti selezionati?
    Non ritiro le domande sul range , mi interessano ancora.
    grazie.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Che io sappia il "range" dovrebbe essere previsto dal prossimo standard, ma può essere che qualche compilatore lo implementi a livello tr1 (se non è in std è in std::tr1 insomma).
    Visual C++ 2010 implementa già alcune cose, oppure si vedere se c'è qualcosa in boost.

    Comunque sia, le funzioni che hai citato non sanno il "from - to" di iteratori che gli passi. Puoi benissimo passare due iteratori appartenenti a un intervallo mediano di un container. L'unico vincolo è che l'interatore From sia più basso dell'iteratore To.

    Tradotto in codice:
    codice:
    list<TipoX> MyList.
    list.push_back(...);
    // per 32 volte.
    
    list<TipoX>::iterator From = std::advance(MyList.begin() 10);
    list<TipoX>::iterator To = std::advance(MyList.begin() 20);
    
    find_if(From,to, <condizione>);
    
    From = std::advance(MyList.begin() 25);
    To= std::advance(MyList.begin() 30);
    
    find_if(From,to, <condizione>);
    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
    un piccolo dubbio shodan, e se ho piu di una sequenza di due iteratori(piu di un from e piu di un to)a coppie diciamo ,ad es da 0 a 5 e da 8 a 20 è possibile fondere in qualche modo le coppie di iteratori o bisogna ad es fare due o piu find_if(come da tuo programma) con le due coppie?
    grazie.

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    è possibile fondere in qualche modo le coppie di iteratori?
    No, e francamente non ne vedo il senso.
    Il massimo che puoi fare è agire su <condizione> se fosse un function object di tipo predicato, fornendo un range più ampio di ricerca e indicando al costruttore di <condizione> il range da saltare. Ma dovresti stare li a memorizzare indici e fare conti sugli offset. Roba da mal di testa che preferisco evitare.
    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.