2012-10-12 17 views

उत्तर

88

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

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

आप सी ++ 11 सुविधाओं है, तो आप एक range-based for loop उपयोग कर सकते हैं:

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

@ Mr.C64 ऐसा नहीं है कि यह इस मामले में के रूप में अभिन्न प्रकार के साथ ज्यादा मायने रखती है। –

+0

यह ध्यान देने योग्य हो सकता है कि यदि आप कंटेनर को संशोधित करना चाहते हैं तो आपको पहले व्यक्ति का उपयोग करने की आवश्यकता है। Googlers के लिए है कि। –

+1

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

7

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

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

यह dereferences और आप के लिए अनुमति देता वर्तमान में इटेटरेटर तत्व को एक्सेस करें।

+3

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

1

यह सवाल करने के लिए एक पूर्ण समाधान है:

तुम कैसे std :: सेट पुनरावृति करते हैं?

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; 
} 
+1

या यहां तक ​​कि 'के लिए (ऑटो i: mset) std :: cout << i; ' –

4

सी ++ 11 standart के लिए एक और उदाहरण:

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

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