Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]stl algoritmi e streams

    Ciao.
    La cosa che devo fare è semplice , leggere una lista di files di testo dal path contenuto in un vettore e concatenare tutto in una stringa.
    Vorrei utilizzare i function object, per ogni file aprire il file , leggerlo e copiare il contenuto in un buffer.
    come potrebbe essere il mio function object?
    grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    ho trovato questo codice:
    [code]
    vector<string> words;
    ifstream file ("c:\\com.txt");
    string * str;
    if (file)
    {
    copy (istream_iterator<string> (file), istream_iterator<string>(),
    back_inserter (words));
    }
    [code]
    che riempie un vector con le parole da un file di testo.
    E' possibile creare un function object che apra il file(preso da un indice del vector)e lo legga sempre nel function object?
    Devo capire come si specifica che parametro debba arrivare al funtore
    Grazie.

  3. #3
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Ma questo buffer a cosa dovrebbe servire? Output su schermo? Fare un mega file? Un'elaborazione successiva?
    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.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    una stringa da visualizzare in un dialogo in un editbox , contiene i warning di un elaborazione di un software di calcolo e dato che questi warning sono in diversi files prodotti da una sola elaborazione lo scopo vorrebbe essere quello di riassumere i warning.
    Per fare questo devo concatenare il contenut di questi diversi files.
    Grazie ciao.

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Se non hai necessità di conservare il buffer per elaborazioni successive, forse è più conveniente scrivere direttamente sull'editbox.
    In pseudocodice:
    codice:
       class ScriviSuEditBox {
          private:
              EditBox& ed;
          public:
              ScriviSuEditBox(EditBox& e) : ed(e) {}
              void operator()(const string& filepath) {
                  ifstream fin(filepath.c_str());
                  if (fin) {
                     string s;
                     while(getline(fin,s)) {
                        ed.scrivi(s);
                     }
                  }
              } 
       };
    
       std::for_each(vecFile.begin(),vecFile.end(), ScriviSuEditBox(BoxSuCuiScrivere));
    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.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    grazie shodan.
    Quello che non riesco a capire di questa tecnica dei function object sono i parametri che arrivano alla funzione .
    ad es:
    perchè
    codice:
    void operator()(const string& filepath)
    ha un solo elemento e quando e come avere piu' parametri nella funzione?

    in pratica penso che dipenda dal for_each il solo parametro.
    Adesso torno a leggere il thinking c++ , se pero' riesci a dari una dritta te ne sono grato.
    ciao

  7. #7
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Originariamente inviato da giuseppe500
    in pratica penso che dipenda dal for_each il solo parametro.
    Esatto. Il numero dei parametri dipende dal tipo di algoritmo usato. Il for_each ne prevede uno, altri algoritmi (swap_ranges ad esempio) ne prevedono due.
    Li puoi riconoscere dal numero di iteratori in input ( gli output iterators non contano ovviamente ) che si passano come range. Se il tuo functor ha bisogno di più parametri, li puoi passare tramite costruttore.
    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.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    capito.
    3 ultime cose:
    1)posso crearmi degli iteratori personalizzati?
    2)come si crea una funzione tipo il for_each?
    3)Penso ad es al sort , come vanno scritte le sue implementazioni?

    ciao

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    ps.
    un ultima cosa:
    ho capito che questa logica porta a separare l'algoritmo dalla logica implementata , tipo for if ecc..., ma oltre a questo quali sono i vantaggi di usare i function object?
    Grazie.

  10. #10
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    1) Gli iteratori nella loro forma più semplice possono essere semplici puntatori. Alcune implementazioni vecchie della STL facevano un semplice typedef.
    codice:
       typedef T* iterator;
    2) Prendi spunto da qui (ti avevo già postato il link)
    http://www.cplusplus.com/reference/algorithm/for_each/

    3) Devi specializzare il sort in base al container scelto. Alcuni algoritmi funzionano meglio con array, altri con liste.

    4) Poter usare ereditarietà, polimorfismo, sintassi meno oscure rispetto ai puntatori a funzione e altro che si può scoprire solo usandoli. Non sono la panacea ma aiutano.
    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.