FindFirst geht nicht



  • bei multi(set) kann ich dir leider nicht mehr folgen. Gibt es denn irgendwo im Netz ein Dokument mit Beispielen das den Umgang mit <vectoren> praktisch erklärt? Mir zeigt sich nicht der Sinn, wenn ich doch alles wie bei Arrays machen muss, sprich keine Erleichterung zu sehen ist.

    Aber wie gesagt ich weiss nicht was du mit multi set meinst.

    Gruß
    Daniel



  • Versuch's mal mit www.cppreference.com (oder in der MSDN).

    Vectoren kannst du tatsächlich fast wie Arrays verwenden, allerdings können sie sich zur Laufzeit vergrößern, wenn sie mehr Platz brauchen:

    vector<wstring> dir;
    while(FindNextFile(hand,&finddata) !=0) 
    {
      dir.push_back(finddata.cFileName);//vergrößert den vector
    }
    
    sort(dir.begin(),dir.end());//Sortierung
    
    for(vector<wstring>::iterator pos=dir.begin();pos!=dir.end();++pos)
      wcout<<*pos<<endl;
    

    Set und Multiset sind geordnete Container (Multiset kann doppelte Werte enthalten), die ihre Elemente automatisch in aufsteigender Reihenfolge - ergo sparst du dir das Sortieren:

    set<wstring> dir;
    while(FindNextFile(hand,&finddata) !=0) 
    {
      dir.insert(finddata.cFileName);
    }
    
    for(vector<wstring>::iterator pos=dir.begin();pos!=dir.end();++pos)
      wcout<<*pos<<endl;
    


  • Ich danke dir, aber es ist doch nun wirklich so das Intern die Vectoren wie Arrays behandelt werden oder? Damit meine ich das keine neue Datenstruktur geschaffen wurde die sich zur Laufzeit in ihrer Größe ändern kann, weil ja vectoren für große Datenmengen genauso langsam werden wie Arrays die neu definiert werden und dann die alten Werte einfach kopieren + den neuen Wert. Da ich hier eine Verzeichnisauflistung programmieren will stellt sich mir nun die Frage ob es nicht wirklich schneller geht (bei 100000 Einträgen und mehr) die Routine zweimal auszuführen und dann das Kopieren zu sparen?

    Ich werde deinen Vorschlag jetzt mal testen, weil er mindestens meine schwachen C++ Kenntnisse aufmöbelt.

    Gruß
    Daniel



  • DanielN schrieb:

    Ich danke dir, aber es ist doch nun wirklich so das Intern die Vectoren wie Arrays behandelt werden oder? Damit meine ich das keine neue Datenstruktur geschaffen wurde die sich zur Laufzeit in ihrer Größe ändern kann, weil ja vectoren für große Datenmengen genauso langsam werden wie Arrays die neu definiert werden und dann die alten Werte einfach kopieren + den neuen Wert.

    Ja, die geben keine echten Vorteile (außer daß du bei manueller Programmierung vermutlich für jedes neue Element die ganze Sturktur kopieren würdest)

    Da ich hier eine Verzeichnisauflistung programmieren will stellt sich mir nun die Frage ob es nicht wirklich schneller geht (bei 100000 Einträgen und mehr) die Routine zweimal auszuführen und dann das Kopieren zu sparen?

    Hmm, da käme dann noch die deque in Frage. Die lässt sich genauso einsetzen wie ein vector und meines Wissens holt sie sich bei Überlauf lediglich einen neuen Speicherblock, in den sie dann weiterschreibt.


Anmelden zum Antworten