[C/C++] Vector zurücksetzen/Datei löschen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Sniper278, 24. Oktober 2010 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 24. Oktober 2010
    Vector zurücksetzen/Datei löschen

    Hi Leute!

    Habe ein zwei kleine Probleme bei meinem Abschlussprojekt für eine C++ Vorlesung (studiere kein Informatik). Es geht um einen Agenten, der den Ausgang aus einem Labyrinth finden muss.
    Ich muss einen Vektor (tmp) vor Beginn jeder Prozedur (ich hoffe ich hab mich da jetzt richtig ausgedrückt) wieder auf Null zurücksetzen.
    Ich hab es zu mit einem Iterator versucht, aber dabei stürzt das Programm ab. Jetzt wollt ich fragen ob es da noch eine einfachere Methode gibt.
    PHP:
    vector < int >:: iterator clear_tmp ;
    clear_tmp  tmp . begin () +  1 ;
        
        for (
    clear_tmp  tmp . begin ();  clear_tmp  !=  tmp . end ();  clear_tmp ++) {
            
    clear_tmp  tmp . erase ( clear_tmp );
            }
    Kann man das dann eigentlich in den Destruktor schreiben?

    Das zweite ist eine Datei die die Koordinaten der Punkte speichert, die der Agent bereits abgelaufen ist. Ich weis nciht wie ich das programmieren soll, dass diese Datei vor Beginn des ersten Schritts im Labyrinth gelöscht wird. Mir ist es solangsam zu blöd, die Datei ständig manuell zu löschen.

    Danke für jede Hilfe,

    Gruß
    sniper278
     
  2. 24. Oktober 2010
    AW: Vector zurücksetzen/Datei löschen

    Hoi,

    die vector-Klasse hat die Methode "clear" für sowas:
    vector::clear - C++ Reference

    Natürlich kannst du das im Destruktor aufrufen, ob das auch Sinn macht hängt von deinem Programm ab

    Dein Problem mit der Datei verstehe ich nicht. Wenn du die Datei einfach zum Schreiben öffnest, wird der Inhalt einfach überschrieben. Wenn du die Datei im Append-Modus (std::ios::append) öffnest, werden die geschriebenen Daten an die Datei hinten drangehängt.

    Gruß,
    pyro
     
  3. 24. Oktober 2010
    AW: Vector zurücksetzen/Datei löschen

    Danke, das mit dem Vektor hat schonmal prima funktioniert. Den Befehl kannte ich leider nicht. Google hat mir nur die Variante mit dem Iterator geliefert.
    cplusplus.com sieht auch sehr nützlich aus...

    Wenn der Agent läuft werden ja immer weitere Koordinaten an das Dateiende gehängt (eben dieser ios:app Befehl). Zu Beginn brauch ich aber eine leere Datei, weil die Daten zwischen durch wieder ausgelesen werden um damit zu arbeiten, dann wären noch die Koordinaten aus alten Testläufen in der Datei.

    BW ist raus. Danke soweit.
     
  4. 24. Oktober 2010
    AW: Vector zurücksetzen/Datei löschen

    Wenn ich dich richtig verstehe, suchst du trunc
    Code:
    fstream filestr("test.txt", fstream::out | fstream::trunc);
    
    fstream - C++ Reference

    Wobei ich dazusagen muss, dass ich lange nichts mit C++ gemacht habe. Vllt. reicht sogar schon alleine fstream: ut, um die Datei vom Anfang an zu beschreiben.
     
  5. 24. Oktober 2010
    AW: Vector zurücksetzen/Datei löschen

    Danke, scheint zu funktionieren.
    Auch wenn ich nicht ganz verstehe, was dabei passiert. Also fstream kenn ich ja, die Befehle : ut und ::tunc hab ich im Link allerdings nicht gefunden (hab zweimal über die Liste geschaut).

    Hab den Code in den Konstruktor geschrieben, der wird doch nur einmal bei Beginn des Programms aufgerufen oder?

    Sorry, aber wie ihr merkt, war er wirklich nur eine einführende Vorlesung in die Programmiersprache und programmieren lernt man ja am besten alla lerning by doing.

    BW ist raus, danke!!!
     
  6. 25. Oktober 2010
    AW: Vector zurücksetzen/Datei löschen

    Ja das ist soweit richtig. Wenn du in einem Programmlauf die Datei mehrmals neu beschreiben willst, schließe den fstream einfach und öffne einen Neuen für die selbe Datei. Ob es auch eleganter geht, weiß ich jetzt selber nicht, aber es dürfte auf jeden Fall funktionieren.
     
  7. 25. Oktober 2010
    AW: Vector zurücksetzen/Datei löschen

    Naja am elegantesten, wäre ein Vektor gewesen, statt alles in eine Datei zu schreiben. Das verlangsamt das Programm doch deutlich. Aber die Idee hatten schon drei andere, deswegen hab ich's jetzt mal auf diesem Weg probiert^^

    aber schon mal schön zu hören, dass ich auf dem richtigen Weg bin
     
  8. 26. Oktober 2010
    AW: Vector zurücksetzen/Datei löschen

    Dann nimm doch auch einen Vector. Was kannst du dafür, dass ein paar andere auf die gleiche Idee kamen?
    Übrigens kann ich mir gut vorstellen, dass Windows/Linux deine Datei im RAM/Cache behält und der Zugriff damit gar nicht mal so langsam sein dürfte...

    mfg,
    r90
     
  9. 26. Oktober 2010
    AW: Vector zurücksetzen/Datei löschen

    hast schon recht, aber wär ja langweilig wenn alle mit einem ähnlichen Programm anrücken. Ich bekomme keine Note dafür und außerdem ging der Ehrgeiz mit mir durch, etwas gleichwertiges zu programmieren. An den Feinheiten haperts allerdings noch etwas... :]

    was besagt eigentlich nun ::tunc? Ich hab den Befehl nicht gefunden...
     
  10. 26. Oktober 2010
    AW: Vector zurücksetzen/Datei löschen

    Du musst auch nach "trunc" suchen, das steht für "truncate". Was die einzelnen Modes genau machen kannst du hier sehen: ios_base: penmode - C++ Reference

    Trunc löscht also den bisherigen Dateiinhalt und schreibt dann quasi "bei 0" los.
     
  11. 26. Oktober 2010
    AW: Vector zurücksetzen/Datei löschen

    ok das erklärt einiges xD

    Danke nochmal!
     
  12. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.