2012-11-09 80 views
8

के बराबर है वहाँ एक सी ++ 11 इस अजगर बयान के बराबर:सी ++ 11 अजगर के एक्स, वाई, जेड = सरणी

x, y, z = three_value_array 

C++ में आप इस रूप में कर सकता है:

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]; 

क्या सी ++ 11 में इसे पूरा करने का एक और अधिक कॉम्पैक्ट तरीका है?

+2

नहीं मानक सी के साथ ++ (Boost.Fusion यहां सहायता करने के लिए कुछ हो सकता है), लेकिन आप 'था std :: टपल <डबल, डबल, 'std :: array 'के बजाय' डबल '' तो आप 'std :: tie (x, y, z) = three_value_tuple;' इसके बजाय उपयोग कर सकते हैं। – ildjarn

उत्तर

9

आप इस उद्देश्य के लिए std::tuple और std::tie उपयोग कर सकते हैं:

#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

क्या सरणी के साथ मूल निर्माण होगा? – Jason

+0

'std :: tie' को दुर्भाग्यवश, 'std :: tuple' को वापस करने के लिए परिभाषित किया गया है। – jogojapan

+0

आप 'std :: tie (j1, j2, j3) = std :: make_tuple (ar [0], ar [1], ar [2]) कर सकते हैं;' (जहां 'ar' सरणी है), लेकिन यह शायद पाइथन कोड के रूप में सुरुचिपूर्ण नहीं है। – jogojapan

संबंधित मुद्दे