2012-11-09 3 views
8

Y at-il un 11 C++ équivalent à cette déclaration python:C++ 11 équivalent de x python, y, z = array

x, y, z = three_value_array 

En C++, vous pouvez le faire aussi:

double x, y, z; 
std::array<double, 3> three_value_array; 
// assign values to three_value_array 
x = three_value_array[0]; 
y = three_value_array[1]; 
z = three_value_array[2]; 

Existe-t-il un moyen plus compact d'accomplir cela en C++ 11?

+2

pas avec C++ norme (Boost.Fusion peut avoir quelque chose pour aider ici), mais si vous aviez 'std :: tuple 'plutôt que' std :: array 'alors vous pouvez utiliser' std :: tie (x, y, z) = trois_value_tuple; 'à la place. – ildjarn

Répondre

9

Vous pouvez utiliser std::tuple et std::tie à cet effet:

#include <iostream> 
#include <tuple> 

int main() 
{ 
    /* This is the three-value-array: */ 
    std::tuple<int,double,int> triple { 4, 2.3, 8 }; 

    int i1,i2; 
    double d; 

    /* This is what corresponds to x,y,z = three_value_array: */ 
    std::tie(i1,d,i2) = triple; 

    /* Confirm that it worked: */  
    std::cout << i1 << ", " << d << ", " << i2 << std::endl; 

    return 0; 
} 
+1

La construction originale avec un tableau fonctionnerait-elle? – Jason

+0

'std :: tie' est défini pour retourner' std :: tuple' seulement, malheureusement. – jogojapan

+0

Vous pourriez faire 'std :: tie (j1, j2, j3) = std :: make_tuple (ar [0], ar [1], ar [2]);' (où 'ar' est le tableau), mais Ce n'est probablement pas aussi élégant que le code Python. – jogojapan

Questions connexes