Int Array in vector speichern



  • Hallo. Ich kämpfe schon seit einiger Zeit mit einem doofen Problem. Wird wahrscheinlich eine sehr einfache Lösung dafür geben, nur habe ich sie bisher nirgends gefunden 😉

    vector<int[2]> v;
        int a[2] = {2, 3};
        v.push_back(a);
    

    Diesen Code möchte ich ausführen. Allerdings erhalte ich den Fehler "ISO C++ forbids initialization in array new". An was liegt das und wie kann ich das beheben? Ich habe das ganze auch schon versucht, mit einem struct aufzubauen, da gab es aber nur noch mehr Probleme...

    Danke für eure Hilfe 🙂



  • std::vector<std::vector<int>>
    

    rya.



  • Du machst einen vector von vectoren von int.

    Du bist schon sehe nahe dran.

    vector<vector<int> > v;
     vector<int> v1;
     v1.push_back ( 1, 2 );
    
     v.push_back( v1 );
    

    Wenn du die bequeme Initialisierung willst, dann kannst du dafür boost::assign nehmen:
    http://www.boost.org/doc/libs/1_40_0/libs/assign/doc/index.html



  • Es funktioniert nun, danke für eure Hilfe 🙂

    Statt

    v1.push_back ( 1, 2 );
    

    musste ich aber

    v1.push_back (1);
    v1.push_back (2);
    

    verwenden, da es sonst einen Fehler gab.

    Und noch eine generelle Frage: Es ist also nicht möglich, ein normales Array in einem Vektor zu speichern?



  • sili schrieb:

    Und noch eine generelle Frage: Es ist also nicht möglich, ein normales Array in einem Vektor zu speichern?

    Generell nein. Aber du kannst boost::array nehmen, das hat gegenüber den Builtin-Arrays keinen Overhead.



  • XMaster schrieb:

    sili schrieb:

    Und noch eine generelle Frage: Es ist also nicht möglich, ein normales Array in einem Vektor zu speichern?

    Generell nein. Aber du kannst boost::array nehmen, das hat gegenüber den Builtin-Arrays keinen Overhead.

    OK, dann werde ich mir das Mal ansehen.



  • sili schrieb:

    Statt

    v1.push_back ( 1, 2 );
    

    musste ich aber

    v1.push_back (1);
    v1.push_back (2);
    

    verwenden, da es sonst einen Fehler gab.

    Oo. Da habe ich echt nicht aufgepasst. Ich wollte da eigentlich schon 2 push_backs machen, aber die sind anscheinend irgendwo untergegangen. (auch wenn der gezeigte Code völlig korrekt ist) 😉
    Aber immerhin bist du selbst drauf gekommen und hast nicht gleich rumgejammert, dass es nicht geht. 👍
    Weil das eben nicht geht, habe ich ja extra den Link zu boost::assign gepostet.



  • Nun ist doch noch eine Frage aufgetaucht 😉

    Gibt es eine Möglichkeit, zu prüfen, ob ein bestimmter Vector-Index exisitert oder nicht?



  • Das ergbit sich daraus, wie viele Elemente der vector hat.

    Sprich wenn er leer ist keiner. Ansonsten von 0 bis count()-1.

    Die passenden Funktionen findest du hier:
    (count und empty, wär hätte es gedacht. ;))
    http://www.cplusplus.com/reference/stl/vector/



  • drakon schrieb:

    Das ergbit sich daraus, wie viele Elemente der vector hat.

    Sprich wenn er leer ist keiner. Ansonsten von 0 bis count()-1.

    Die passenden Funktionen findest du hier:
    (count und empty, wär hätte es gedacht. ;))
    http://www.cplusplus.com/reference/stl/vector/

    Manchmal wäre es so einfach... 😉



  • Die Referenz bietet auf sehr viele nicht gestellte Fragen antworten. 😉



  • drakon schrieb:

    Die Referenz bietet auf sehr viele nicht gestellte Fragen antworten. 😉

    Da habe ich schon gesucht, nur komme ich mit einem PHP Hintergrund. In PHP sind eigene Indizes möglich und somit ist ein solcher einfacher Test nicht möglich. Daher habe ich nach einer Methode wie vector_index_exists() gesucht. C++ ist halt doch etwas anders 😉



  • drakon schrieb:

    Sprich wenn er leer ist keiner. Ansonsten von 0 bis count()-1.

    size()-1 , oder? 😉

    sili schrieb:

    Da habe ich schon gesucht, nur komme ich mit einem PHP Hintergrund. In PHP sind eigene Indizes möglich und somit ist ein solcher einfacher Test nicht möglich. Daher habe ich nach einer Methode wie vector_index_exists() gesucht. C++ ist halt doch etwas anders 😉

    Was du wahrscheinlich meinst, ist eine Map/assoziatives Array/Schlüssel-Wert-Zuordnungsliste. Das gibts auch in C++ ( std::map ), schau mal in der von drakon geposteten Referenz nach.

    Ansonsten: Ja, C++ ist anders. Versuche nicht, Sprachkonzepte 1:1 von PHP zu übertragen, das endet meistens nur in Frustration. 🙂



  • Nexus schrieb:

    drakon schrieb:

    Sprich wenn er leer ist keiner. Ansonsten von 0 bis count()-1.

    size()-1 , oder? 😉

    Ja, natürlich.
    Da habe ich tatsächlich immer ein durcheinander, weil:
    count in php
    und seit neuem:
    count in eiffel
    In Actionscript gibts das afaik ja auch..

    Und wenn ich mich richtig erinnere, hat VBA sogar beides, also count und size, die das gleiche machen.. 🙄



  • drakon schrieb:

    und seit neuem:
    count in eiffel

    Dachte ich mir doch. Eiffel wird dich noch zerstören! :p


Log in to reply