2012-01-12 13 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 चर में असाइन कर सकता हूं?

+0

यह बहुत अस्पष्ट है कि आप यहां क्या पूछ रहे हैं। मैं आपको सुझाव दूंगा कि आप असाइन करके क्या मतलब रखते हैं, और एक चर द्वारा आपका क्या मतलब है। –

उत्तर

15

सी ++ में आप टुपल प्रकार और 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

यदि सी ++ 11 कोई विकल्प नहीं है, तो [बूस्ट टुपल लाइब्रेरी] (http: //www.boost। संगठन/डॉक्टर/libs/रिलीज/libs/tuple/डॉक्टर/tuple_users_guide.html) इन सुविधाओं को प्रदान करता है। –

+0

यदि सी ++ 11 कोई विकल्प नहीं है, तो भी आप सी ++ 03 की 'std :: जोड़ी ' –

+0

@Antionio का उपयोग कर सकते हैं: लेकिन सी ++ 03 में कोई 'टाई' नहीं है, इसलिए यह बहुत बदसूरत लग रहा है: 'std :: जोड़ी परिणाम = डीएफएस (ए, बी, सी, डी); समाधान = परिणाम। सबसे पहले; cost_limit = result.second; '। –

3

आप इस दो तरीकों कर सकते हैं:

  1. दो मूल्यों के साथ एक struct बनाएँ और इसे वापस: साथ

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

    कॉल:

    struct result 
    { 
        int first; 
        int second; 
    }; 
    
    struct result DFS(a, b, c, d) 
    {    
        // code 
    } 
    
  2. मापदंडों बाहर है:

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

यह स्पष्ट रूप से नहीं है कि ओपी क्या मांग रहा है। वह दो अलग-अलग मानों को दो अलग-अलग चरों में लौटने के लिए कह रहा है। – Szabolcs

+2

@Szabolcs: यह स्पष्ट नहीं था। – Tudor

+1

यह वह नहीं है जिसे उसने पूछा था। वह पाइथोनिक तरीका चाहता है, जिसका अर्थ है 'समाधान = पहला; cost_limit = second; ' – filmor

0

एक बात आप को पता होना चाहिए कि अगर ए, बी, सी, डी आधार प्रकार नहीं हैं, लेकिन एक वर्ग आप परिभाषित के उदाहरण, के फू कहते हैं, और आप = वर्ग के ऑपरेटर को ओवरलोड, आपको यह तथ्य सुनिश्चित करना होगा कि ऑपरेटर असाइन किए गए ऑब्जेक्ट का संदर्भ वापस करेगा, या नहीं, आप श्रृंखला असाइनमेंट (समाधान = cost_limit = DFS (..) केवल cost_limit को असाइन नहीं कर पाएंगे)। = ऑपरेटर इस तरह दिखना चाहिए:

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

तो सी ++ 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); 
संबंधित मुद्दे

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