Geschwindigkeit zweier Methoden-Versionen



  • Habe im Lehrbuch folgende Methode gefunden, die ich in den Schleifen etwas abgeändert habe. Welche Schleife würdet ihr vorziehen? Gibt es (und ab wann) Unterschiede in der Laufzeit?

    Die erste schickt einen Suchstring über jedes Wort des Vektors und wählt danach aus, welche Großbuchstaben in Kleinbuch. umgewandelt werden sollen

    void stripCaps(vector<string> *words)
    {
    vector<string>::iterator it = words->begin();
    vector<string>::iterator et = words->end();

    string caps("ABCDEFGHIJKLMNOPQRSTUVWXYZ");

    (1)

    while (it != et) {
          string::size_type pos = 0;
          while ((pos = (*it).find_first_of(caps, pos)) != string::npos)
                {
                cout << "found Caps:  " << *it << endl;
                (*it)[pos] = tolower((*it)[pos]);
                cout << "after:    " << *it << endl;
                }
    
          ++it;
    }
    

    bei der zweiten wandel ich einfach grundsätzlich jeden Buchstaben um.

    (2)

    while (it != et) {
          string::size_type pos = 0;
          for(int i=0; i<(*it).size(); i++)
                {
                cout << "found Caps:  " << (*it)[i] << endl;
                (*it)[i] = tolower((*it)[i]);
                cout << "after:    " << (*it)[i] << endl;
                }
    
          ++it;
    }
    

    }



  • Also ich würde die Funktion so schreiben:

    void stripCaps(vector<string> & words)
    {
      for(unsigned int i=0; i<words.size(); ++i)
      {
        transform(words[i].begin(), words[i].end(), words[i].begin(), tolower);
      }
    }
    


  • Danke, die Funktion kannte ich noch nicht, sehe mich ja auch eher als Anfänger. Mußte sie programmbedingt etwas umschreiben auf Zeiger, aber funktioniert.

    Habe (nicht sehr genaue) Messungen über einer 350KB-Textdatei durchgeführt mit Funktion clock(), und das Ergebnis ist ziemlich eindeutig.

    Variante (1) (vom Buchautor) 181 ms
    Variante (2) (1 von mir abgewandelt) 80 ms
    Variante (3) (nach Jester) 70 ms

    Damit haben sich meine Fragen beantwortet. Der Aufwand mit einem Suchstring und find_first_of lohnt also in diesem Fall nicht und war somit eine rein didaktische Angelegenheit.


Anmelden zum Antworten