2017-09-18 4 views
6

कहें, मैं इनलाइन परिभाषित कई जोड़ों को फिर से शुरू करना चाहता हूं। क्या लिखने का एक छोटा रास्ता है:रेंज-जोड़ी सूची के लिए आधारित

for(auto pair : std::initializer_list<std::pair<int,int>>{{1,2}, {3,4}}) 
    // ... 

?

+0

आप उस प्रकार :) – StoryTeller

+0

कि @StoryTeller कम नहीं है उर्फ ​​कर सकते हैं, यह क्या है? – IceFire

+0

लूप अभिव्यक्ति कम है। यदि आप एक से अधिक बार लूपिंग करते हैं तो इससे चीजें कम हो जाएंगी। – StoryTeller

उत्तर

8

बस निर्दिष्ट करें कि पहला तत्व एक जोड़ी है। बाकी स्वचालित रूप से निष्कर्ष निकाला जाएगा:

for(auto& pair : {std::pair<int,int>{1,2}, {3,4}}) 
    ; 

braced संलग्न प्रारंभकर्ता std::initalizer_list होने के लिए निष्कर्ष निकाला जाता है, और पहला तत्व एक जोड़ी सभी तत्वों एक जोड़ी के लिए एक initalizer होने के लिए की आवश्यकता होगी नामित होने के।

आप सी ++ 11 में चिह्नित है, लेकिन पूर्णता के लिए, यह सी ++ 17 में भी कम हो सकता है:

for(auto& pair : {std::pair{1,2}, {3,4}}) 
    ; 

कारण वर्ग के लिए टेम्पलेट तर्क कटौती।

for(auto& pair : {std::make_pair(1,2), {3,4}}) 
    ; 

हालांकि जाहिरा तौर पर यह सी ++ 17 संस्करण के रूप में कोड गोल्फ के लिए के रूप में उपयोगी नहीं है,: आपको लगता है कि नहीं है, तो, std::make_pair से यदि आप टेम्पलेट तर्क कटौती के लाभ को बनाए रखना चाहते हो जाएगा ।

+0

अच्छा है, धन्यवाद :) के आधार पर आपका जवाब, मुझे यह संस्करण भी मिला जो सी ++ 17: 'के लिए काम करता है (ऑटो जोड़ी: {std :: make_pair (1,2), {3,4}, {5,6}})' – IceFire

+0

@IceFire - हाँ, यह सी ++ 11 में भी काम करता है। तर्क कटौती सी ++ 17 में 'make_pair' को प्रतिस्थापित कर सकती है। – StoryTeller

+0

हां, मुझे यह सबसे अच्छा लगता है। मेरा कंपाइलर अब तक इसे स्वीकार नहीं करता है, हालांकि। वैसे भी, हमने सभी विकल्पों को कवर किया है – IceFire

1

अच्छा ol 'प्रकार उर्फ:

using pairlist = std::initializer_list<std::pair<int,int>>; 

for(auto pair : pairlist{{1,2}, {3,4}}) 
{ 
    // stuff happens here 
} 
+0

यह वास्तव में लंबे समय तक – IceFire

+0

@IceFire एक से अधिक लूप पर औसत नहीं है। – Galik

+0

मैंने कई लूप के बारे में कुछ भी नहीं कहा है। असल में, इस सूची को इनलाइन रखना चाहते हैं, यह एक स्पष्ट संकेतक है कि मेरे पास केवल एक लूप इंस्टेंस है – IceFire

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