2012-01-12 19 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); 

¿Puedo hacer algo como esto? ¿y cómo?¿Puedo asignar en 2 variables al mismo tiempo en C++?

+0

No está muy claro lo que estás preguntando aquí. Sugiero que expliques a qué te refieres con asignar, y qué quieres decir con una variable. –

Respuesta

15

En C++ 11 puede usar los tipos de tupla y tie para eso.

#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

Si C++ 11 no es una opción, la [biblioteca Boost Tuple] (http: //www.boost. org/doc/libs/release/libs/tuple/doc/tuple_users_guide.html) proporciona estas características. –

+0

Si C++ 11 no es una opción, aún puede usar C++ 03 'std :: pair ' –

+0

@Antionio: pero no hay 'empate' en C++ 03, por lo que se ve bastante feo: 'std :: pair result = DFS (a, b, c, d); solución = resultado.primero; cost_limit = result.second; '. –

3

Puede hacer esto de dos maneras:

  1. Crear una estructura con dos valores y devolverlo:

    struct result 
    { 
        int first; 
        int second; 
    }; 
    
    struct result DFS(a, b, c, d) 
    {    
        // code 
    } 
    
  2. Tener a cabo parámetros:

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

    llamada con:

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

Esto claramente no es lo que el OP está pidiendo. Él está pidiendo devolver dos valores separados en dos variables separadas. – Szabolcs

+2

@Szabolcs: Eso no estaba claro. – Tudor

+1

Esto no es lo que él pidió. Él quiere el camino pythonic, que significa 'solución = primero; cost_limit = second; ' – filmor

0

Una cosa que debe saber es que si a, b, c, d no son tipos base, pero las instancias de una clase que ha definido, digamos Foo, y se sobrecarga el operador = de la clase, debe asegurarse de que el operador devolverá una referencia al objeto que se le asignó, de lo contrario no podrá encadenar las asignaciones (solution = cost_limit = DFS (..) solo asignará cost_limit). El operador = debería verse así:

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

Si C++ 11 no es posible, es posible utilizar referencias.

Pasando una referencia a las variables en los parámetros.

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); 
Cuestiones relacionadas