Vector Problem



  • 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.



  • Auch hier kann man den Konstruktor und swap bemühen.

    vector<vector<int> > g;
    // dann irgendwann
    vector<vector<int> >(m, vector<int>(m)).swap(g);
    

    Dein einfaches resize(m) hat ja auch nur den äußeren vector geändert. Den Inneren müsstest du auch noch anpassen. Das Problem hast du mit swap nicht. Außerdem ist es so ein Einzeiler.



  • Braunstein schrieb:

    Dein einfaches resize(m) hat ja auch nur den äußeren vector geändert. Den Inneren müsstest du auch noch anpassen. Das Problem hast du mit swap nicht. Außerdem ist es so ein Einzeiler.

    Stimmt natürlich. Aus irgendeinem Grund habe ich nur das v gesehen und wollte das resizen.. (Warum ist das überhaupt dort 😕 )



  • Braunstein schrieb:

    Auch hier kann man den Konstruktor und swap bemühen.

    vector<vector<int> > g;
    // dann irgendwann
    vector<vector<int> >(m, vector<int>(m)).swap(g);
    

    Dein einfaches resize(m) hat ja auch nur den äußeren vector geändert. Den Inneren müsstest du auch noch anpassen. Das Problem hast du mit swap nicht. Außerdem ist es so ein Einzeiler.

    vielen vielen dank.
    aber die beiden vektoren sind sowieso unterschiedlich lang.

    und sehe ich das richtig, dass ich auch mit vektoren nur quadratische "matrizen" machen kann?



  • Braunstein schrieb:

    Auch hier kann man den Konstruktor und swap bemühen.

    vector<vector<int> > g;
    // dann irgendwann
    vector<vector<int> >(m, vector<int>(m)).swap(g);
    

    Dein einfaches resize(m) hat ja auch nur den äußeren vector geändert. Den Inneren müsstest du auch noch anpassen. Das Problem hast du mit swap nicht. Außerdem ist es so ein Einzeiler.

    vielen vielen dank.
    aber die beiden vektoren sind sowieso unterschiedlich lang.

    und sehe ich das richtig, dass ich auch mit vektoren nur "matrizen" machen kann?

    denn wie gesagt, ich brauche eher
    m verschiedene zeilen, wobei m von durchgang zu durchgang sich ändert und
    die m verschiedenen zeilen sind fast alle unterschiedlich lang auch in einem durchgang...


Anmelden zum Antworten