विशेष मामले के लिए:
जाहिर foreach
छोरों पर सभी सूची को संशोधित करने के लिए नहीं किया जाना चाहिए, क्योंकि foreach
पाश वास्तव में एक पर काम कर रहा है मूल सूची के कॉपी। यदि आप इसे संशोधित करते हैं, न केवल आप अंतर्निहित साझाकरण और संशोधित-लिखने के कारण जुर्माना लगाते हैं, लेकिन लूप से बाहर निकलने के बाद भी आपके परिवर्तनों को त्याग दिया जाता है।
इसे पूरा करने का सही तरीका एक पुनरावर्तक का उपयोग करना है। मैं जावा-स्टाइल इटरेटर्स पसंद करता हूं। आप देखेंगे कि प्रत्येक सूची प्रकार के लिए इटरेटर कक्षाएं हैं जो सरल इटरेटर प्रदान करती हैं। QLinkedList
उदाहरण के लिए, कक्षा QMutableLinkedListIterator
है।
मेरी टिप्पणी के साथ Qt documentation से कहा::
QMutableLinkedListIterator<int> i(list); // pass list as argument
while (i.hasNext()) {
int val = i.next(); // retrieve value of current item
if (val < 0) {
i.setValue(-val); // change/set value of current item
} else if (val == 0) {
i.remove(); // delete current item
}
}
सामान्य स्थिति के लिए: यह इस प्रकार के रूप में इस्तेमाल किया जा सकता
आप एक क्यूटी डेटा संरचना अन्य की तुलना में उपयोग कर रहे हैं QLinkedList
, संभावनाएं अच्छी हैं कि आपके लिए एक इटरेटर वर्ग है। यदि आप सूची को संशोधित करना चाहते हैं, तो म्यूटेबल संस्करण का उपयोग करें। इनमें से प्रत्येक के लिए एपीआई लगभग समान है।
Structure | Immutable Case | Mutable Case
-----------------------------------------------------
QList | QListIterator | QMutableListIterator
QLinkedList | QLinkedListIterator | QMutableLinkedListIterator
QHash | QHashIterator | QMutableHashIterator
QMap | QMapIterator | QMutableMapIterator
QSet | QSetIterator | QMutableSetIterator
QStringList | QStringListIterator | QMutableStringListIterator
QVector | QVectorIterator | QMutableVectorIterator
स्रोत
2013-07-05 17:29:50
@hyde मैंने अपने प्रश्न में उस सवाल से जुड़ा हुआ है, जिसमें कहा गया है कि यह जो भी मैं पूछ रहा था उसकी पूरी तरह से संबोधित नहीं किया। 'QList' और 'QLinkedList' के बीच एक अंतर है। वे समान हैं, लेकिन * समान * समान नहीं हैं। –
ठीक है, यह सवाल का जवाब देता है, जहां तक मैं देख सकता हूं। जब आप अपने 'foreach' का उपयोग करते हैं तो क्यूटी कंटेनर की उथली प्रतिलिपि लेता है। यदि आप मूल कंटेनर संरचना को संशोधित करते हैं, तो क्यूटी को पूर्ण कंटेनर की एक नई गहरी प्रतिलिपि (लिखने के अर्थशास्त्र पर प्रतिलिपि बनाने) की आवश्यकता होती है। संक्षेप में, इसके लिए 'foreach' का उपयोग न करें। और अर्थशास्त्र प्रत्येक क्यूटी कंटेनर के लिए समान हैं। – hyde