2012-10-12 107 views
51

我有這樣的代碼:如何迭代std :: set?

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

沒有->first值。 我如何獲得價值?

回答

88

您必須取消引用迭代器才能檢索您的集合的成員。

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層的功能,你可以使用一個range-based for loop

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

@ Mr.C64這不是問題多帶整體類型作爲在這種情況下。 –

+0

可能值得注意的是,如果您打算修改容器,則需要使用第一個。對於谷歌是這樣的。 –

+1

我的事情C++ 11解決方案應該與參考(自動&F)。對大多數情況來說更好。對於這個特定的情況。 – jaskmar

7

只需使用*it

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

這解引用它,可以讓你訪問迭代器當前所在的元素。

+3

只是一個小的提示:通常最好在for循環中使用++而不是++,以避免迭代器的一個額外副本。 – 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

甚至'for(auto i:mset)std :: cout << i;' –

4

爲C++ 11非標準又如​​:

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

for (const int &number : data) 
    cout << number; 
相關問題