c++ - How can I iterate over two vectors simultaneously using BOOST_FOREACH? -
मैं निम्न को बूस्ट FOREACH के साथ दोहराना चाहूंगा
std :: vector & lt; Int> gt; :: const_iterator i1; Std :: vector & lt; int & gt; :: const_iterator i2; के लिए (i1 = v1.begin (), i2 = v2.begin (); i1 और lt; v1.end () और amp; i2 और lt; v2.end (); ++ i1, ++ i2) {doSomething ( * I1, * i2); }
एक साथ दो चीजों को दोबारा बदलना एक "ज़िप" कहा जाता है (कार्यात्मक प्रोग्रामिंग से) , और:
ज़िप इटरेटर एक साथ कई नियंत्रित दृश्यों को समानांतर-पुनरावृत्त करने की क्षमता प्रदान करता है। एक ज़िप iterator इटरेटर के एक ट्यूपल से बनाया गया है। ज़िप इटरेटर चलते हुए समानांतर में सभी iterators को स्थानांतरित करता है। ज़िप इटरेटर के संदर्भ में एक ट्यूपल देता है जिसमें अलग-अलग इरेटरर्स को डीरेंसिंग के परिणाम शामिल हैं।
ध्यान दें कि यह एक इरेरेटर है, एक श्रेणी नहीं है, इसलिए BOOST_FOREACH का उपयोग करने के लिए फिर से उनमें से दो सामान को एक या जोड़ी में रख सकते हैं तो यह बहुत अच्छा नहीं होगा, लेकिन कुछ सावधानी के साथ आप शायद एक सरल zip_range लिखकर लिख सकते हैं: BOOST_FOREACH (boost :: tuple & lt; Int, int & gt; और amp; p, zip_range (v1, v2)) {doSomething (p.get & lt; 0 & gt; (), p.get & lt; 1 & gt; ()); } या 2 के लिए विशेष-मामले और std :: pair के बजाय boost :: tuple का उपयोग करें। < पी> मुझे लगता है कि doSomething के पैरामीटर (int & amp ;, int & amp;) हो सकता है, वास्तव में हम एक tuple & lt; int & amp;; int & amp; & gt; । आशा है कि यह काम करता है।
Comments
Post a Comment