Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di fabi080
    Registrato dal
    Mar 2002
    Messaggi
    442

    [C++] Algoritmi STL e parametri

    Ciao a tutti, ho un paio di domande da sottoporvi, è più una curiosità che un reale problema, in quanto la soluzione alternativa è banale, partiamo da un codice di esempio:

    codice:
    // include vari
    
    class foo {
      int val;
    public:
      foo(int a) { val = a; };
      int get() {return val;};  
    };
    
    typedef vector<foo *> foos;
    
    bool cmp(foo *p1, foo *p2) {
      return p1->get() < p2->get();
    }
    
    int main() {
      foos b;
      back_insert_iterator<foos> j(b);
    
      srand(time(NULL));
    
      for (int i =0 ; i < 100; i++) 
        *j = new foo(rand() % 100);
      
      cout << "Il massimo è " <<  
      (*max_element(b.begin(), b.end(), cmp))->get() << endl;
    
    }
    Prima curiosità/domanda: esiste un modo per evitare di definire la funzione cmp, ovvero di far funzionare il codice così come la versione che ho postato chiamando una qualche funzione della STL? Sto cercando ma non ho ben capito quali possano fare al caso mio, finora ho trovato la mem_fun, ma credo che dovrei usarla in combinazione con qualche altra funzione, ma non capisco come.

    P.S. Un'altra soluzione potrebbe essere quella di ridefinire l'operatore < nella classe foo, ma non si adatta al mio caso in quanto nella classe reale ho altri metodi get sui quali devo fare operazioni simili.

    Seconda curiosità/domanda: se io volessi scrivere un codice del genere sempre utilizzando la STL
    codice:
      cout << "Esiste 4? " <<  (b.end() != find_if(b.begin(), 
        b.end(), ???? )) << endl;
    cosa dovrei passare come terzo parametro dell find_if, avevo pensato ad una cosa del tipo greater<int>(), ma come faccio a passare la costante 4 dell esempio (magari bind2nd), e come farei a dire a greater di richiamare il metodo get() della classe.

    Qui la soluzione è banale, basta fare un for con gli iteratori e confrontare col valore cercato, ma sarei curioso di sapere se esiste un modo di farlo con la STL, da quello che ho visto nei vari reference hanno pensato praticamente a tutto, mi sembrerebbe strano che non sia contemplato un caso del genere.

    Ciao e grazie.

  2. #2
    Utente di HTML.it L'avatar di fabi080
    Registrato dal
    Mar 2002
    Messaggi
    442
    Up...

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 © 2025 vBulletin Solutions, Inc. All rights reserved.