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

Могу ли я сделать что-то вроде этого? и как?Могу ли я назначить в 2 переменных одновременно на C++?

+0

Непонятно, что вы здесь задаете. Я бы предложил вам объяснить, что вы подразумеваете под назначением, и что вы подразумеваете под переменной. –

ответ

15

В C++ 11 для этого можно использовать типы кортежей и tie.

#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

Если C++ 11 не является вариантом, библиотека [Boost Tuple library] (http: //www.boost. org/doc/libs/release/libs/tuple/doc/tuple_users_guide.html) предоставляет эти функции. –

+0

Если C++ 11 не является опцией, вы все равно можете использовать 'std :: пару C++ 03 '' –

+0

@Antionio: но в C++ 03 нет 'tie', поэтому он выглядит довольно уродливым: 'std :: pair result = DFS (a, b, c, d); solution = result.first; cost_limit = result.second; '. –

3

Вы можете сделать это двумя способами:

  1. Создать-структуру с двумя значениями и возвращает его:

    struct result 
    { 
        int first; 
        int second; 
    }; 
    
    struct result DFS(a, b, c, d) 
    {    
        // code 
    } 
    
  2. Есть из параметров:

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

    вызов:

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

Это явно не то, о чем просит ОП. Он просит вернуть два отдельных значения в две отдельные переменные. – Szabolcs

+2

@Szabolcs: Это было непонятно. – Tudor

+1

Это не то, о чем он просил. Ему нужен питонический путь, означающий «решение = первый; cost_limit = second; ' – filmor

0

Одна вещь, которую вы должны знать, что если а, Ь, с, d не являются базовыми типами, но экземпляры класса вы определили, скажем, Foo, и перегрузить оператор = класса, вы должны убедиться в том, что оператор вернет ссылку на объект, который назначен, иначе вы не сможете назначать цепочки (решение = cost_limit = DFS (..) будет присваивать только cost_limit). Оператор = должен выглядеть следующим образом:

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

Если C++ 11 невозможен, можно использовать ссылки.

Передача ссылки на переменные в параметрах.

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); 
Смежные вопросы