Problem mit std::vector< >



  • Hallo!!!

    Ich möchte mir einen Datentyp 'table' basteln...
    Eine Tabelle ist ja ganz einfach ein zweidimensionales Array, und da ich's halt dynamisch möchte, dachte ich an vector.
    Allerdings funktioniert es jetzt halt nicht, und ich verstehe nicht wieso.

    #include <vector>
    #include <string>
    
    typedef std::vector<std::vector<std::string>> table;
    
    int main(void)
    {
    	table t;
    
    	t[1][1]="X=1;Y=1"; // <-- Das hier geht eben nicht.
    }
    


  • t.at(1).at(1)="X=1;Y=1"; // <-- Das hier geht eben nicht.



  • du solltest erstmal den vector füllen, bzw erstmal mindest (in deinem fall) mit 2 elementen bestücken

    vector<vector<string>(2)> table(2) oder so geht das



  • Dein vector ist noch leer. Du musst ihn zuerst füllen. (Oder zumindest die Grösse ändern).



  • OK, danke!



  • le_garçon schrieb:

    ...

    typedef std::vector<std::vector<std::string>> ...
    

    Ist vielleicht nur hier, aber da muss ein Leerzeichen zwischen die beiden '>'...

    Gruß,

    Simon2.



  • Simon2 schrieb:

    le_garçon schrieb:

    ...

    typedef std::vector<std::vector<std::string>> ...
    

    Ist vielleicht nur hier, aber da muss ein Leerzeichen zwischen die beiden '>'...

    Gruß,

    Simon2.

    Nicht wenn er den MSVC2005 oder einen GCC4.2 benutzt. 😉



  • HansiHinterseher schrieb:

    Simon2 schrieb:

    le_garçon schrieb:

    typedef std::vector<std::vector<std::string>>
    

    Ist vielleicht nur hier, aber da muss ein Leerzeichen zwischen die beiden '>'...

    Nicht wenn er den MSVC2005 oder einen GCC4.2 benutzt. 😉

    Oh man, ich benutze den MSVC++ 2005 seit Jahren und klemme immer die Leerzeichen dazwischen 😞 Danke!



  • Morgen! 🤡
    Ich benutze tatsächlich VC2005 und da ist's halt nicht nötig.

    Cheers!



  • HansiHinterseher schrieb:

    Nicht wenn er den MSVC2005 oder einen GCC4.2 benutzt. 😉

    Auch dort sollte ers machen weils beim MSVC und GCC4 eine Erweiterung ist, die nicht im Standard ist und daher nicht portabel - ist immer blöd wenn man auf nem anderen Compiler plötzlich Fehlermeldugnen bekommt nur weil einem der "Hauscompiler" solche Schludrigkeiten durchgehen lässt. Ab C++09 ist das Verhalten ohne Leerzeichen dann auch im Standard (würd mich mal interessieren ob Max Munch dann immernoch in den Anwesenheitslisten des Commitees auftaucht).



  • Badestrand schrieb:

    Oh man, ich benutze den MSVC++ 2005 seit Jahren und klemme immer die Leerzeichen dazwischen 😞 Danke!

    Wie tragisch^^



  • HansiHinterseher schrieb:

    ...Nicht wenn er den MSVC2005 oder einen GCC4.2 benutzt. 😉

    Wusste ich tatsächlich nicht ... aber ich beschäftige mich auch nicht so besonders mit solchen nicht-standardkonformen Compiler-Erweiterungen. Schon gar nicht, wenn's nur um solche "syntactic sugar"-Sachen geht, die man problemlos gleich "richtig" machen kann. 😉

    Mit "non standard functions" dagegen habe ich gar keine Probleme - solange man sie vernünftig kapseln kann.

    Gruß,

    Simon2.



  • Wieso nicht-standardkonform? Klar, dieses Nestes-Template-Syntax-Problem wird erst mit C++0x behoben, aber der MSVC hat es seit bekanntgabe schon implementiert. Rein formal hast du natürlich Recht, das es aktuell nicht der Norm entspricht. Aber ich finde es sehr schön, das die Compiler-Hersteller schon ein paar C++0x-Bugfixes implementiert haben.



  • HansiHinterseher schrieb:

    ...Aber ich finde es sehr schön, das die Compiler-Hersteller schon ein paar C++0x-Bugfixes implementiert haben.

    Nun, ich programmiere aber jetzt und zwar für Compiler, die den jetztigen Std umgesetzt haben...
    Außerdem programmiere ich im Team und für verschiedene Plattformen, da bringen einen solche Schmakazien in Teufels Küche - da hat man Schwierigkeiten, die das Tippen eines Leerzeichens bei weitem überwiegen.
    "-Wall -pedantic" ist da Pflicht. 😉

    Erfahrungsgemäß werden es sowieso nicht Punkt 2009 alle C++-Compiler den neuen Standard auf dieselbe Art unterstützen, sondern noch einige Jahre ins Land gehen, bis sich C++0x etabliert hat - und wer weiß schon, welche Features das betreffen wird (obwohl das ">>" bestimmt dazugehören wird).
    Stell Dir mal vor, Du hättest 1998 ein Riesenprojekt aufgesetzt und da intensiv auf "export" gesetzt ...

    Gruß,

    Simon2.


Log in to reply