द्वारा तत्व बदलें जब मुझे इटरेटर का उपयोग करके सेट के तत्व को बदलना है तो मुझे समस्या है। यह सरल कोड समझा सकता है कि मैं क्या करना चाहता हूं।इटरेटर
set<int> s;
s.insert(12);
set<int>::iterator it = s.begin();
*it = 4; // error C3892: 'it' : you cannot assign to a variable that is const
मैं सामान्य इटरेटर द्वारा निर्धारित मान को क्यों नहीं बदल सकता, न कि const_iterator?
मेरे कोड में इटेटरेटर सेट :: find() द्वारा वापस किया गया था। सेट से विशिष्ट तत्व चुनने और उसे बदलने का शायद बेहतर तरीका है।
+1: हालांकि यह सवाल छोड़ देता है: क्यों 'शुरू' एक non-'const' iterator लौटाता है? –
एक सामान्य इटरेटर लौटाना भ्रमित है, लेकिन अब कम से कम समझ में आता है कि मुझे यह त्रुटि क्यों मिलती है। बहुत बहुत धन्यवाद। – Scypi
@ ओली चेहरल्सवर्थ, स्सीपी: यह थोड़ा सा ट्रिकियर है, इटेटरेटर 'const_iterator' नहीं है, लेकिन एक * mutable * iterator है। यह 'कुंजी' है जिसे * अपरिवर्तनीय * अनुक्रमित किया जा सकता है। §23.2.4p5 * "[...] एक सहयोगी कंटेनर में कुंजी अपरिवर्तनीय हैं।" * क्यों वे गैर-कॉन्स 'शुरू() 'और अंत (' const_iterator' की बजाय हमेशा) प्रदान करते हैं, मेरा अनुमान है कि यह है कंटेनर इंटरफेस को यथासंभव वर्दी रखने के लिए किया गया। विशेष रूप से §23.2.4p6 में कहा गया है कि इस मामले में 'iterator' और 'const_iterator' * समान हो सकते हैं, और ओडीआर उल्लंघनों से बचने के लिए हमेशा' const_iterator' का उपयोग करके सुझाव देते हैं। –