कैसे स्थापित करने के लिए एसटीडी :: सेट?


91

मेरे पास यह कोड है:

std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it) {
    u_long f = it; // error here
}

कोई ->firstमूल्य नहीं है । मैं मूल्य कैसे प्राप्त कर सकता हूं?

जवाबों:


142

अपने सेट के सदस्य को पुनः प्राप्त करने के लिए आपको पुनरावृत्ति को रोकना होगा।

std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it) {
    u_long f = *it; // Note the "*" here
}

यदि आपके पास C ++ 11 विशेषताएँ हैं, तो आप लूप के लिए श्रेणी-आधारित का उपयोग कर सकते हैं :

for(auto f : SERVER_IPS) {
  // use f here
}    

@ Mr.C64 ऐसा नहीं है कि यह इस मामले में अभिन्न प्रकार के साथ बहुत मायने रखता है।
कुछ प्रोग्रामर ने

1
यह ध्यान देने योग्य हो सकता है कि कंटेनर को संशोधित करने का इरादा होने पर आपको पहले एक का उपयोग करने की आवश्यकता है। गोगलर्स के लिए जो है।
लीजन डेथ

3
मैं C ++ 11 समाधान संदर्भ (ऑटो और एफ) के साथ होना चाहिए। यह ज्यादातर मामलों के लिए बेहतर है। इस विशिष्ट मामले के लिए भी।
१mar

हाय रोब, क्या होगा अगर मैं एक नया u_long वैरिएबल घोषित करने के अलावा SERVER_IPS में तत्वों को संदर्भित करना चाहता हूं? क्या मैं u_long & f = * का उपयोग कर सकता हूं; ? और यदि नहीं, तो मुझे क्या करना चाहिए?
BioCoder

1
@BioCoder - आप एक संदर्भ चर का उपयोग कर सकते हैं, लेकिन यह एक होना चाहिए स्थिरांक , संदर्भ चर तो जैसे: const u_long& f = *it;
रॉब

15

बस *पहले का उपयोग करें it:

set<unsigned long>::iterator it;
for (it = myset.begin(); it != myset.end(); ++it) {
    cout << *it;
}

यह इसे dereferences करता है और आपको उस तत्व को एक्सेस करने की अनुमति देता है जो वर्तमान में चालू है।


7
बस एक मामूली नोट: यह आमतौर पर लूप के लिए ++ के बजाय ++ का उपयोग करना पसंद करता है ताकि इट्रेटर की एक अतिरिक्त प्रतिलिपि से बचा जा सके।
user2891462

14

C ++ 11 मानक के लिए एक और उदाहरण:

set<int> data;
data.insert(4);
data.insert(5);

for (const int &number : data)
  cout << number;

5

आप इसे कैसे सेट करते हैं?

int main(int argc,char *argv[]) 
{
    std::set<int> mset;
    mset.insert(1); 
    mset.insert(2);
    mset.insert(3);

    for ( auto it = mset.begin(); it != mset.end(); it++ )
        std::cout << *it;
}

2
या यहां तक ​​किfor(auto i : mset) std::cout << i;
जैक डेथ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.