vectoren als funktionsparameter lassen sich nich verändern?



  • ja, ich mal wieder(*seufz*)
    ich wollte eine funktion schreiben, die vectoren der größe nach sortiert(in meinem fall sind listen nicht gut gewesen,da ich sehr schnell zwischen den einträgen wechseln muss)

    die funktion sieht so aus(nach prinzip des bubble sort):

    void sort(vector<int> Knoten){
        bool change=true;
        int temp;
        while(change==true){
            change=false;
            for(size_t i=0;i<Knoten.size()-1;i++){
                if(Knoten[i]>Knoten[i+1]){
                    temp=Knoten[i];
                    Knoten[i]=Knoten[i+1];
                    Knoten[i+1]=temp;
                    cout<<Knoten[0]<<Knoten[1]<<endl;//hier wird getestet
                    change=true;
                }
            }
        }
    }
    

    so, nehmen wir mal an, ich hab im vector 2 werte, der erste ist 15, der zweite10.
    innerhalb der sort funktion wird korrekt geswitcht,wenn ich danach aber nochmal eine ausgabe machen lasse, bekomme ich wieder die alten werte.
    um sicher zu gehen, dass ich nich irgendeinen dummen fehler gemacht hab, hab ichs mal mit ganz normalen arrays probiert, und da funktionierts völlig korrekt.
    ich behelf mir im moment mit folgender konstruktion: (*Knoten)[i] aber das is doch arg umständlich,da ich dazu zuerst einen pointer auf die ganze vector Klasse schaffen muss,und den dann hinterher mühsam wieder auseinanderpuzzlen muss...Weis jemand, wieso das so ist?und kann man da irgendwie abhilfe schaffen?



  • Du machst eine Wert-Übergabe, d.h. an die Funktion wird eine Kopie des Originalvektors übergeben. Wenn sie damit arbeitet, ändert sich das Original natürlich nicht. Wenn du das willst musst du eine Referenz auf den Vektor übergeben:

    void sort(vector<int>& Knoten) ...
    

    Mit eingebauten Arrays funktioniert es deshalb, weil Arrays gar nicht per Wert übergeben werden können. Es wird automatisch ein Pointer auf das erste Element des Arrays übergeben.

    void sort_array(int knoten[200])
    

    ist exakt identisch zu

    void sort_array(int *knoten)
    


  • ah ja, jetzt läufts 😉


Anmelden zum Antworten