如何迭代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值。 我如何获得价值?

您必须取消引用迭代器才能检索您的集合的成员。

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

如果您具有C ++ 11function,则可以使用基于范围的for循环 :

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

只要使用*之前:

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

这将取消引用它并允许您访问迭代器当前所在的元素。

C ++ 11标准的另一个例子是:

 set<int> data; data.insert(4); data.insert(5); for (const int &number : data) cout << number; 

这是一个完整的解决scheme:

你如何迭代std :: set?

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