Vector Problem



  • Da wir hier im C++ Forum sind würde ich eher zu einem std::vector<std::vector<T> > raten.



  • this->that schrieb:

    Da wir hier im C++ Forum sind würde ich eher zu einem std::vector<std::vector<T> > raten.

    *zustimm*

    Damit kannst du dann die Größe dynamisch verändern.



  • ok vielen dank ich werde mich mal einlesen.
    ich melde mich, falls es weitere probleme gibt diesbezüglich thx.



  • um die frage oben etwas konkreter zu formulieren

    ich habe einen array mit meinetwegen 1122345567
    und brauche jeweils einen neuen arry pro ziffer mit der länger der häufigkeit der zahl sprich

    11 22 3 4 55 6 7

    und da wollte ich ursprünglich für 11 22 3 4 usw jeweils einen neuen array mit entsprechender länge deklarieren.
    beim nächsten schleifendurchlauf kann es sein, dass

    11 222 3 44 5 6
    gebraucht wird, also weniger arrays mit anderer größe.

    ist das mit vektoren möglich bzw gibt es da bessere lösungen?



  • ach ja es müßte noch mit C kompatibel sein, was ich bisher durch extern "C" int main (..... geschafft habe, gilt das auch für vectoren?



  • Das geht mit vector bestimmt.
    Wie meinst du das mit dem C? Du willst deinen Code C-Kompatibel haben?! Afaik geht das nicht. C ist ja nicht aufwärtskompatibel. 😉
    Aber du kannst mit extern weiterhin C Funktionen benutzen, wenn du das meinst.



  • drakon schrieb:

    Das geht mit vector bestimmt.
    Wie meinst du das mit dem C? Du willst deinen Code C-Kompatibel haben?! Afaik geht das nicht. C ist ja nicht aufwärtskompatibel. 😉
    Aber du kannst mit extern weiterhin C Funktionen benutzen, wenn du das meinst.

    ja genau in diese richtung meinte ich es auch 😉
    thx.

    gibt es irgendwo ein schönes tutorial für vector, weil ich habe nur über google zu knappe erklärungen oder zu spezielle forenbeiträge gesehen...?

    bzw kann mir einer vielleicht bitte, wenn es nicht zuviel umstände macht, posten wie ich einen array 112334556 beispielsweise
    in 5 zeilen speichern kann?

    also
    11
    2
    33
    4
    55
    6

    kann gerne alles null sein, wäre mir sogar lieber, aber diese struktur müßte es haben für weitere berechnungen.



  • Schau dich mal hier rum:
    http://www.cppreference.com/

    Da hat es auch Beispiele dazu. Vectoren sind eigentlicht etwas wie sehr hanhabbare array's.





  • danke für die links

    allerdings bin ich schon auf ein problem gestoßen, was warscheinlich ein krasser anfängerfehler ist....

    ich kontruiere den vektor

    vector<int> v;

    und das dos fenster öffnet sich für ungefähr 0.3 sekunden und schließt sich wieder. kommentiere ich es weg, geht es wieder ganz normal....
    woran kann das liegen (nutze dev c++)

    es kommt zwar eine antiquated header warnung, aber 1. woher bekommt man "neue" header und 2. hatte ich das schon öfter und nichts passiert.



  • cofriga schrieb:

    danke für die links

    allerdings bin ich schon auf ein problem gestoßen, was warscheinlich ein krasser anfängerfehler ist....

    ich kontruiere den vektor

    vector<int> v;

    und das dos fenster öffnet sich für ungefähr 0.3 sekunden und schließt sich wieder. kommentiere ich es weg, geht es wieder ganz normal....
    woran kann das liegen (nutze dev c++)

    es kommt zwar eine antiquated header warnung, aber 1. woher bekommt man "neue" header und 2. hatte ich das schon öfter und nichts passiert.

    Komisch. Du machst sonst nichts mit dem vector? Hast du den Header richtig includet und ev. noch ein std:: voreran?! (Sollte ja nicht an dem liegen, aber sonst wüsste ich nicht, was das Problem sein könnte.. :S)



  • drakon schrieb:

    cofriga schrieb:

    danke für die links

    allerdings bin ich schon auf ein problem gestoßen, was warscheinlich ein krasser anfängerfehler ist....

    ich kontruiere den vektor

    vector<int> v;

    und das dos fenster öffnet sich für ungefähr 0.3 sekunden und schließt sich wieder. kommentiere ich es weg, geht es wieder ganz normal....
    woran kann das liegen (nutze dev c++)

    es kommt zwar eine antiquated header warnung, aber 1. woher bekommt man "neue" header und 2. hatte ich das schon öfter und nichts passiert.

    Komisch. Du machst sonst nichts mit dem vector? Hast du den Header richtig includet und ev. noch ein std:: voreran?! (Sollte ja nicht an dem liegen, aber sonst wüsste ich nicht, was das Problem sein könnte.. :S)

    #include <vector>
    using namespace std;

    mal mit std:: versucht mal ohne, ohne erfolg...
    nein nur diese eine zeile, deswegen poste ich ja. wenn hier schon so viele hilfsbereit sind, kann man wohl von mir verlangen, alles versucht zu haben 😉

    EDIT:

    ich habe es mal die exe direkt im dos aufgerufen und folgende fehlermeldung kam:

    this application has requested the runtime to terminate it in an unusual way.
    please contact the application´s support team for more information



  • cofriga schrieb:

    this application has requested the runtime to terminate it in an unusual way.
    please contact the application´s support team for more information

    .. Genau diesen Fehler hatte ich vorgestern auch. 😉

    Also mach mal ein neues Projekt oder probier wenigstens das mal auf das kleins möglichste zu beschränken. (damit du es ev. posten kannst).
    Dann wäre da mal noch ein anderer Compiler..
    Hast du das neuste PSDK installiert?

    btw:
    Irgendwie habe ich das Gefühl, dass du ne Frau bist?! (Hat jetzt nichts mit dem Problem zu tun.. Wahrscheinlich nur der komische Name.. :))



  • habe ich gerade versucht
    neuer code

    nur die vector anweisung wieder das selbe problem.

    ...was ist ein psdk tut mir leid, aber ich weiß es wirklich nicht.

    ps: nein ich bin keine frau, auch wenn es der name evtl suggerieren mag 😉



  • Das ist die Platform SDK. Sorry, hat nix mit zu tun. Hatte irgendwie im Kopf, dass du eine Windows Anwendung machst. 🙄

    Naja. Dan poste mal den gesamten Code, der nicht funktioniert.



  • ich depp

    thx für die hilfe, jetzt habe ich die bereiche mal überprüft, die ja "sicher" richtig sind.
    und siehe da ich habe ein array mit länge m gemacht und m noch gar keinen wert zugewiesen

    danke nochmals



  • so also ich habe mal versucht einen zweidimensionalen vector zu erstellen, der jetzt zu versuchszwecken in jeder zeile die arraywerte von part übernimmt:

    [cpp]
            m=7;
            Part = new int[m];   
            for (i=0; i<m; i++)                                 
                Part[i]=1;
    
    	vector<int> v;
    	vector<vector<int> >g;
    
            for(i=0; i<m; i++)
                for(j=0; j<m; j++)
                    {   
    
                            g[i][j]=Part[j];
    
                    }
    [/cpp]
    

    das programm stürtzt ab.
    ist da ein fehler in der umsetzung oder bin ich da komplett auf dem falschen weg.
    denn ein tutorial sagt mal so, das andere mal so. sicherlich widersprechen sie sich nicht, aber ich weiß nicht, was ich in meinem fall anwenden muss.

    ich habe es auch mit v.push_back () versucht, aber ich weiß nicht, wie ich das zweidimensional machen soll.

    und noch eine zweite frage:

    ich habe eine funktion fkt(*par, m) die den array part bisher bearbeitet hat.
    kann ich - ohne die funktion wesentlich zu verändern- auch eine "zeile" des vektors mit der funktion verändern lassen? Denn sonst ist das alles hinfällig.

    danke im voraus



  • Also erstens haben die Variablen i und j keinen Typ, aber ich denke, dass du die wo anderst deklariert hast.

    Zweitens haben diese vectoren eine grösse von 0. Das heisst, wenn du einen Wert einfügen willst, musst du das entweder mittels push_back (für beide vectoren) machen oder den resize und eine neue grösse angeben.

    (ungetestet)

    vector<int> v;
        vector<vector<int> >g;
    
           v.resize (m);
           g.resize (m);
    
            for(i=0; i<m; i++)
                for(j=0; j<m; j++)
                    {  
    
                            g[i][j]=Part[j];
    
                    }
    


  • Wozu dient hier v?
    Wenn di Größe feststeht kann man das gleich im Konstruktor des vector angeben.

    vector<vector<int> > g(m, vector<int>(m));
    

    Das erzeugt einen 2D-vector der Größe m*m
    Dann kan man direkt reinschreiben.



  • Braunstein schrieb:

    Wozu dient hier v?
    Wenn di Größe feststeht kann man das gleich im Konstruktor des vector angeben.

    vector<vector<int> > g(m, vector<int>(m));
    

    Das erzeugt einen 2D-vector der Größe m*m
    Dann kan man direkt reinschreiben.

    Genau, aber er (jetzt hätte ich schon fast sie gesagt.. 🙄 ) hat gesagt, dass sich das bei jedem durchlauf ändern kann. Darum würde sich das resize mehr anbieten.


Anmelden zum Antworten