dynamische speicher verwaltung



  • ahm welche header datein brauch ich dafür......
    aso und mein prog is ne dos(box) anwendung...
    gretz beelze



  • #include <fstream>
    #include <vector>
    #include <algorithm>
    #include <iterator>
    


  • warum kann das eigentlich der compiler nicht selbst die standard, boost header selbst vorschlagen. ersieht doch z.B. wenn ich strcmp einsetze, dann kann er cstring vorschlagen usw.?



  • woher soll der compiler denn wissen wo sich diese funktion befindet? dazu müsste er beim kompilieren sämtliche header durchforsten nach der definition der gesuchten funktion.



  • datei öffnen (fopen), dann ans ende seeken und mit ftell die dateilänge herausfinden. dann malloc(), wieder an den anfang springen und blockweise in den speicher lesen (fread oder so und &p[nächster block] als zieladresse)
    die lösung ist zwar nicht mit templates und iteratoren und dem ganzen kram vollgestopft, aber sie funktioniert einfach und mit minimalen includes (wirkt sich positiv auf dateigröße aus)

    cu



  • c.rackwitz schrieb:

    datei öffnen (fopen), dann ans ende seeken und mit ftell die dateilänge herausfinden. dann malloc(), wieder an den anfang springen und blockweise in den speicher lesen (fread oder so und &p[nächster block] als zieladresse)
    die lösung ist zwar nicht mit templates und iteratoren und dem ganzen kram vollgestopft, aber sie funktioniert einfach und mit minimalen includes (wirkt sich positiv auf dateigröße aus)

    cu

    Dennoch sind wir hier im C++ Forum. 😉



  • -=beelze=- schrieb:

    ... erweiter ich das feld mit realloc.

    aber er hat damit angefangen 😉 diese Iteratoren sehen aber trotzdem grausam aus, obgleich sie nicht schlecht sind.



  • diese Iteratoren sehen aber trotzdem grausam aus

    Für viele sieht das einfach megageil aus. Es lebe die STL.

    PS: das muss an den spitzen Klammern, Underscores und den schlechten Lehrbüchern liegen, das dies so viele abschreckt. 😉



  • Davon abgesehen funktioniert die Lösung mit seek, tell und read doch fast genauso in C++ mit einem ifstream und einem vector. Ohne viele spitze Klammern, ebenso effizient und dazu noch Exception-sicher.



  • Helium schrieb:

    ifstream datei("foo");
    
    vector<char> zeichen;
    
    copy (istream_iterator<char>(datei), istream_iterator<char>(), back_inserter(zeichen));
    

    Dann steht die Datei in "zeichen".

    Wie würde der Code für das Zurückspeichern aussehen?



  • Erhard Henkes schrieb:

    PS: das muss an den spitzen Klammern, Underscores und den schlechten Lehrbüchern liegen, das dies so viele abschreckt. 😉

    Oder an solchen Fehlermeldungen:

    f:\programmieren\C++\tests\rek\main.cpp(21) : error C2784: 'std::basic_ostream<_Elem,_Traits> &std::operator <<(std::basic_ostream<_Elem,_Traits> &,const std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'std::basic_ostream<_Elem,_Traits> &' from 'int'
    d:\Microsoft Visual Studio .NET 2003\Vc7\include\string(535) : see declaration of 'std::operator<<'' f:\\programmieren\\C++\\tests\\rek\\main.cpp(21) : error C2784: 'std::basic\_ostream<char,\_Traits> &std::operator <<(std::basic\_ostream<char,\_Traits> &,unsigned char)' : could not deduce template argument for 'std::basic\_ostream<char,\_Elem> &' from 'int' d:\\Microsoft Visual Studio .NET 2003\\Vc7\\include\\ostream(887) : see declaration of 'std::operator<<''
    f:\programmieren\C++\tests\rek\main.cpp(21) : error C2784: 'std::basic_ostream<char,_Traits> &std::operator <<(std::basic_ostream<char,_Traits> &,const unsigned char *)' : could not deduce template argument for 'std::basic_ostream<char,_Elem> &' from 'int'
    d:\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(880) : see declaration of 'std::operator<<'' f:\\programmieren\\C++\\tests\\rek\\main.cpp(21) : error C2784: 'std::basic\_ostream<char,\_Traits> &std::operator <<(std::basic\_ostream<char,\_Traits> &,signed char)' : could not deduce template argument for 'std::basic\_ostream<char,\_Elem> &' from 'int' d:\\Microsoft Visual Studio .NET 2003\\Vc7\\include\\ostream(873) : see declaration of 'std::operator<<''
    f:\programmieren\C++\tests\rek\main.cpp(21) : error C2784: 'std::basic_ostream<char,_Traits> &std::operator <<(std::basic_ostream<char,_Traits> &,const signed char *)' : could not deduce template argument for 'std::basic_ostream<char,_Elem> &' from 'int'
    d:\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(866) : see declaration of 'std::operator<<'' f:\\programmieren\\C++\\tests\\rek\\main.cpp(21) : error C2784: 'std::basic\_ostream<\_Elem,\_Traits> &std::operator <<(std::basic\_ostream<\_Elem,\_Traits> &,\_Elem)' : could not deduce template argument for 'std::basic\_ostream<\_Elem,\_Traits> &' from 'int' d:\\Microsoft Visual Studio .NET 2003\\Vc7\\include\\ostream(828) : see declaration of 'std::operator<<''
    f:\programmieren\C++\tests\rek\main.cpp(21) : error C2784: 'std::basic_ostream<_Elem,_Traits> &std::operator <<(std::basic_ostream<_Elem,_Traits> &,const _Elem *)' : could not deduce template argument for 'std::basic_ostream<_Elem,_Traits> &' from 'int'
    d:\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(783) : see declaration of 'std::operator<<'' f:\\programmieren\\C++\\tests\\rek\\main.cpp(21) : error C2784: 'std::basic\_ostream<char,\_Traits> &std::operator <<(std::basic\_ostream<char,\_Traits> &,char)' : could not deduce template argument for 'std::basic\_ostream<char,\_Elem> &' from 'int' d:\\Microsoft Visual Studio .NET 2003\\Vc7\\include\\ostream(744) : see declaration of 'std::operator<<''
    f:\programmieren\C++\tests\rek\main.cpp(21) : error C2784: 'std::basic_ostream<char,_Traits> &std::operator <<(std::basic_ostream<char,_Traits> &,const char *)' : could not deduce template argument for 'std::basic_ostream<char,_Elem> &' from 'int'
    d:\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(697) : see declaration of 'std::operator<<'' f:\\programmieren\\C++\\tests\\rek\\main.cpp(21) : error C2784: 'std::basic\_ostream<\_Elem,\_Traits> &std::operator <<(std::basic\_ostream<\_Elem,\_Traits> &,char)' : could not deduce template argument for 'std::basic\_ostream<\_Elem,_Traits> &' from 'int' d:\\Microsoft Visual Studio .NET 2003\\Vc7\\include\\ostream(659) : see declaration of 'std::operator<<''
    f:\programmieren\C++\tests\rek\main.cpp(21) : error C2784: 'std::basic_ostream<_Elem,_Traits> &std::operator <<(std::basic_ostream<_Elem,_Traits> &,const char *)' : could not deduce template argument for 'std::basic_ostream<_Elem,_Traits> &' from 'int'
    d:\Microsoft Visual Studio .NET 2003\Vc7\include\ostream(613) : see declaration of 'std::operator`<<''
    f:\programmieren\C++\tests\rek\main.cpp(21) : error C2677: binary '<<' : no global operator found which takes type 'std::stringstream' (or there is no acceptable conversion)

    und solchen Funktionen:

    template<class CharType, class Traits, class Allocator>
    basic_istream<CharType, Traits>& getline(
    basic_istream<CharType, Traits>& _Istr,
    basic_string<CharType, Traits, Allocator>& _Str
    );

    🙄



  • Templates sind eigentlich schon ganz nützlich und in Maßen auch einigermaßen anzusehen.
    Als ich dann meine eigene Templatelistenklasse geschrieben hab (spezialisiert auf Performance), da hab ich schon mächtig das ko**en bekommen bei diesem überflüssigen Zeug, was man da überall hinklatschen muss (vor jeder Funktionsdefinition ne extra Ankündigung, dass es ein Template ist)

    Aber soetwas hab ich wirklich noch nicht gesehen 😮
    Da zerschieß ich mir doch lieber die Kiste mit Pointern 😉



  • Hallo,

    naja, sieht schon wüst aus, aber entscheidend ist ja eigentlich nur das hier:

    f:\programmieren\C++\tests\rek\main.cpp(21) : error C2677: binary '<<' : no global operator found which takes type 'std::stringstream' (or there is no acceptable conversion)



  • bin mir sicher, der code, der diesen fehler hatte, sieht dank templates und stl noch viel wüster aus...
    stimmt. wenn ich fehler beim compilieren finde, dann lös ich immer nur den ersten, weil sich alle weiteren dann meist von allein lösen.


Anmelden zum Antworten