2012-01-12 14 views
6
int DFS(a, b,c,d) 
{ 
    first=a+b; 
    second=c+d; 
    return(first,second); 
} 

solution, cost_limit = DFS(a, b,c,d); 

posso fare qualcosa di simile? e come?Posso assegnare 2 variabili contemporaneamente al C++?

+0

Non è chiaro cosa stai chiedendo qui. Ti suggerirei di spiegare cosa intendi per incarico e cosa intendi per variabile. –

risposta

15

In C++ 11 è possibile utilizzare i tipi di tupla e tie per quello.

#include <tuple> 

std::tuple<int, int> DFS (int a, int b, int c, int d) 
{ 
    return std::make_tuple(a + b, c + d); 
} 

... 

int solution, cost_limit; 
std::tie(solution, cost_limit) = DFS(a, b, c, d); 
+3

Se C++ 11 non è un'opzione, la [Boost Tuple library] (http: //www.boost. org/doc/libs/release/libs/tuple/doc/tuple_users_guide.html) fornisce queste funzionalità. –

+0

Se C++ 11 non è un'opzione, è comunque possibile utilizzare 'std :: pair di C++ 03' –

+0

@Antionio: ma non ci sono 'tie' in C++ 03, quindi risulta piuttosto brutto: 'std :: pair result = DFS (a, b, c, d); soluzione = risultato.first; cost_limit = result.second; '. –

3

Si può fare in due modi:

  1. Creare una struttura con due valori e restituirla:

    struct result 
    { 
        int first; 
        int second; 
    }; 
    
    struct result DFS(a, b, c, d) 
    {    
        // code 
    } 
    
  2. Avere fuori parametri:

    void DFS(a, b, c, d, int& first, int& second) 
    { 
        // assigning first and second will be visible outside 
    } 
    

    chiamata con:

    DFS(a, b, c, d, first, second); 
    
+2

Questo chiaramente non è ciò che l'OP sta chiedendo. Chiede di restituire due valori separati in due variabili separate. – Szabolcs

+2

@Szabolcs: non era chiaro. – Tudor

+1

Questo non è quello che ha chiesto. Vuole il modo pitone, che significa 'soluzione = prima; cost_limit = second; ' – filmor

0

Una cosa che si dovrebbe sapere è che se a, b, c, d non sono tipi di base, ma le istanze di una classe definita, diciamo Foo, e si sovraccarica l'operatore = della classe, è necessario assicurarsi che l'operatore restituisca un riferimento all'oggetto assegnato, altrimenti non sarà possibile assegnare assegnazioni a catena (solution = cost_limit = DFS (..) assegnerà solo a cost_limit). L'operatore = dovrebbe essere il seguente:

Foo& Foo::operator =(const Foo& other) 
    { 
     //do stuff 
     return other; 
    } 
1

Se C++ 11 non è possibile, è possibile utilizzare riferimenti.

Passando un riferimento alle variabili nei parametri.

int DFS(int a, int b, int c, int d, int &cost_limit) 
{ 
    cost_limit = c + d; 
    return a + b; 
} 

int solution, cost_limit; 

solution = DFS(a, b, c, d, cost_limit); 
Problemi correlati