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


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.