mehrere Rückgabewerte für Funktionen



  • Hallo liebe Kollegen!

    Sagt mal kann man eine Funktion schreiben, die mehrere Rückgabewerte hat?

    wenn man z.B. auf mehreren Eingabevectoren rechnet, diese sich alle verändern und man diese alle wieder zurückgeben will?

    z.B.

    vector <int> berechnung(vector <int> a, vector <int> b) {
        ...
        ca. 200 Zeilen Berechnung  ;) 
        ...
    
        return a;    
        // hier sollte jetzt auch noch b zurückgegeben werden...
    }
    

    Danke für euere Ideen... 🙂



  • Hi freestyle,

    Du kannst besser auf Referenzen zurückgreifen und damit direkt auf den vector-Objekten arbeiten:

    void berechnung(vector<int>& a, vector<int>& b) {
        ...
        ca. 200 Zeilen Berechnung  -> ändert direkt mainA und mainB
        ...
    }
    
    int main() {
       vector<int> mainA, mainB;
       // irgendwie füllen ...
       berechnung(mainA, mainB);
    ...
    

    hier kannst Du direkt auf a und b die Veränderungen machen.
    ... und wenn Du noch "unveränderte Kopien" brauchst, machst Du die einfach vorher.

    Alternativ kannst Du natürlich auch mit einem pair arbeiten:

    #include <utility>
    
    pair<vector<int>, vector<int> > berechnung(vector<int> const& a, vector<int> const& b) {
       pair<vector<int>, vector<int> > ret = make_pair(a, b);
    
       // ... und dann arbeitest Du bei Deiner Berechnung auf ret.first 
       //     und ret.second (statt auf a und b)
        ...
        ca. 200 Zeilen Berechnung  ;) 
        ...
    
       return ret;
    }
    

    Allerdings wird da unnötig viel kopiert (erst a & b nach ret; dann der Rückgabewert)... aber immerhin nicht öfter als bei Deinem Vorschlag.

    Gruß,

    Simon2.



  • ahh super, das mit den referenzen kannte ich noch nicht.

    Nur noch mal im Klartext:

    Ich lege mir also in der Main die Objekte z.B. int a an und greife dann in der funktion mittels &a direkt auf das Objekt zu, welches dann seine Werte verändert?

    Funktioniert das auch, wenn das Objekt ein struct mit Unterobjekten ist, wie z.B.:

    struct teil{
        double a};
    
    void struct berechnen(struct teil &teil_eins){
         teil_eins.a = teil_eins.a * 2   
    };
    
    main{
    
    teil eins;
    eins.a = 5;
    
    berechnen(eins);
    

    --> sollte dann 10 rauskommen oder?



  • jupp



  • super!!

    jungz und mädelz ihr seid einfach klasse 😉

    Danke!



  • free_style schrieb:

    void struct berechnen
    

    Was ist das für ein Rückgabetyp?

    free_style schrieb:

    (struct teil &teil_eins){
    

    struct in diesem Kontext kann man in C++ weglassen, teil ist hier ein eigenständiger Datentyp.





  • struct in diesem Kontext kann man in C++ weglassen, teil ist hier ein eigenständiger Datentyp.

    Er kommt whohl von C.



  • kann mir da jemand ein noch klareres Beispiel geben, ich kann nicht ganz glauben, dass das gehen soll.



  • Tim06TR schrieb:

    kann mir da jemand ein noch klareres Beispiel geben, ich kann nicht ganz glauben, dass das gehen soll.

    Was genau? 😕 Ein struct als Rückgabe? Call-by-reference? std::pair? Du solltest deutlicher werden...



  • Tim06TR schrieb:

    kann mir da jemand ein noch klareres Beispiel geben, ich kann nicht ganz glauben, dass das gehen soll.

    1. Keine alten Threads unnötigerweise wiederbeleben.
    2. Sich verständlich ausdrücken.


Log in to reply