2017-06-06 6 views
12

मैं आसानी सेतत्वों को संशोधित करने के लिए प्रारंभकर्ता-सूची loops का उपयोग कैसे करें?</p> <pre><code>2 1 0 </code></pre> <p>मैं इतना है कि मैं वास्तविक वस्तुओं संशोधित कर सकते हैं तो क्या करें, बस टिप्पणी की में के रूप में करना चाहिए:

std::list<int> foo, bar, baz; 

int main() 
{ 
    foo.push_back(3); 
    foo.push_back(2); 
    bar.push_back(1); 
    for (auto &x : {foo, bar, baz}) { 
    // x.push_back(42); 
    std::cout << x.size() << std::endl; 
    } 
    return 0; 
} 

यह प्रिंट पढ़ने के लिए पहुंच के लिए प्रारंभकर्ता सूचियों का उपयोग कर एक for .. in पाश अनुकरण कर सकते हैं रेखा:

// x.push_back(42); 
+2

बहुत निकट से संबंधित: https://stackoverflow.com/questions/31724863/range-based-for-with -ब्रेस-प्रारंभकर्ता-ओवर-गैर-कॉन्स-वैल्यू –

उत्तर

17

आप उपयोग कर सकते हैं std::reference_wrapper:

for (std::list<int>& x : {std::ref(foo), std::ref(bar), std::ref(baz)}) { 
    x.push_back(42); 
    std::cout << x.size() << std::endl; 
} 
+0

के साथ काम कर रहा हूं, मैं [सी ++ संदर्भ] (http://en.cppreference.com) देख रहा हूं। Std :: context_wrapper कहां से बुलाया जाता है? अर्थात। वह उपकरण क्या है, यह कैसे काम करता है, यह क्या करता है, इत्यादि? – zipzit

+0

@zipzit http://en.cppreference.com/w/cpp/utility/functional/reference_wrapper –

20

एक संकेतक आधारित चाल है कि हम सी से पता के रूप में लागू किया जा सकता है इस प्रकार है

for (auto x : { &foo, &bar, &baz }) { 
    x->push_back(42); 
    std::cout << x->size() << std::endl; 
    } 

बहरहाल, यह मानता है कि आप वास्तव में के रूप में उनकी प्रतियां करने का विरोध किया, मूल वस्तुओं के साथ काम करना चाहते हैं। (कोड आप पोस्ट मूल रूप से वास्तव में प्रतियों के साथ काम करता है।)

+0

यह एक अच्छा बिंदु है! मुझे पूरा यकीन था कि मैं मूल वस्तुओं – marmistrz

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