Dynamische Arrays - Elemente einfügen und löschen



  • Hallo!

    Wenn ich ein Array habe z.B.:

    char *s;
    s = new char[2];
    s[0] = 3;
    s[1] = 1;
    

    Wie kann ich jetzt ein drittes Element ans Ende anfügen? Gibt es auch die Möglichkeit ein Element zwischen 0 und 1 einzufügen? Wie kann man ein Element löschen, so dass alle folgenden Elemente eins nach vorne auf rücken?

    Schon im Voraus vielen Dank für die Hilfe! Mit Google hatte ich leider nichts gefunden.



  • Dynamische Arrays sind höchstens zu gebrauchen, um komfortablere Klassen drumrum zu schreiben. Guck dir z.B. mal std::vector im Buch oder der Dokumentation deiner Wahl an.



  • Danke für die Antwort! Kann man eine Datei auch irgendwie direkt in einen Vector laden? Ich muss in meinen Projekt eine 200MB große Datei laden und ein paar Dinge ersetzen.



  • -gast- schrieb:

    Danke für die Antwort! Kann man eine Datei auch irgendwie direkt in einen Vector laden? Ich muss in meinen Projekt eine 200MB große Datei laden und ein paar Dinge ersetzen.

    Was für Daten enthält das File denn? Generell kannst du das machen.

    Cu
    André



  • Du kannst Vektoren genau wie dynamische Arrays direkt mit Daten beschreiben. Da, wo du vorher den Zeiger auf das dynamische Array übergeben hättest, nimmst du jetzt "&vektor[0]" oder "&vektor.front()".



  • Hi!

    Danke für die Antwort.

    Folgendes klappt:

    vector<char> vec;
    DateiLaden.read(&vec.front(), DateiGroesse);
    

    Aber dies leider nicht:

    vector<unsigned char> datei;
    DateiLaden.read((char)&datei.front(), DateiGroesse);
    


  • vector<unsigned char> datei;

    Welchen Sinn macht denn "unsigned char"? Kannst du mich da bitte mal aufklären?

    Cu
    André



  • vector<unsigned char> datei(DateiGroesse);
    DateiLaden.read(static_cast<char*>(datei.begin()), DateiGroesse);
    


  • Klappt leider nicht: invalid static_cast from type 'unsigned char' to type 'char*'

    Kennt jemand eine gute dt. Seite über vector?



  • Berufspenner schrieb:

    vector<unsigned char> datei;

    Welchen Sinn macht denn "unsigned char"? Kannst du mich da bitte mal aufklären?

    Das arbeiten mit nur postivien Zahlen spart in meinem Programm viel Arbeit und Feherquellen.



  • -gast- schrieb:

    Berufspenner schrieb:

    vector<unsigned char> datei;

    Welchen Sinn macht denn "unsigned char"? Kannst du mich da bitte mal aufklären?

    Das arbeiten mit nur postivien Zahlen

    Das ist mir schon klar, aber ich sehe keinen Sinn da drin, da es bei Zeichen erstens nicht auf ein Vorzeichen ankommt und zweitens char zu int eh positiv ist oder irre ich mich da jetzt total?

    Cu
    André



  • davie schrieb:

    DateiLaden.read(static_cast<char*>(datei.begin()), DateiGroesse);
    

    Ich glaube, das muss ein reinterpret_cast sein, weil die beiden Zeigertypen ja nichts miteinander zu tun haben. Außerdem ist datei.begin() ja nicht unbedingt in jeder STL-Implementierung ein Zeiger, oder garantiert der Standard das? Also entweder &*datei.begin() oder eben &datei.front(); 🙂

    Berufspenner schrieb:

    da es bei Zeichen erstens nicht auf ein Vorzeichen ankommt

    unsigned char ist kein Zeichen, sondern der kleinstmögliche vorzeichenlose Integer.



  • Hallo!

    Danke für die Antwort. Aber leider klappt es immer noch nicht. Der Compiler gibt zwar keine Fehlermeldung mehr aus, dafür stürtzt das Programm jetzt hier ab.

    #include <iostream>
    #include <fstream>
    #include <vector>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    
       vector<char> datei;
       unsigned long long DateiGroesse;
       unsigned long long i;
    
       ifstream DateiLaden("D:\\Programme\\Unsortiert\\test\\1", ios::binary); 
       if (DateiLaden.good()) 
       { 
          DateiLaden.seekg(0, ios::end); 
          DateiGroesse = streamoff(DateiLaden.tellg()); 
          DateiLaden.seekg(0, ios::beg);      
    
          datei = vector<char> (DateiGroesse);
          DateiLaden.read(reinterpret_cast<char*>(datei.front()), DateiGroesse); // <-- HIER STÜRTZT DAS PROGRAMM AB!!! 
    
          DateiLaden.close(); 
    
          /* datei wird bearbeitet */  
    
          ofstream DateiSpeichern("D:\\Programme\\Unsortiert\\test\\2", ios::binary); 
    
          if (DateiSpeichern.good()) 
          { 
    
             DateiSpeichern.write(reinterpret_cast<char*>(datei.front()), DateiGroesse);
             DateiSpeichern.close(); 
    
          }
    
       }
    
       system("PAUSE");
    
       return 0;
    
    }
    


  • Fehlergefunden!!! Ich habe beim laden und speichern die Zeiger vergessen. Sorry!

    Vielen Dank an operator void und alle anderen!!!


Anmelden zum Antworten