12

我对如何获取集合中的元素感到困惑。我想我必须使用迭代器,但我该如何逐步完成它?

4

6 回答 6

19

替换type为,例如,int.. 并替换var为集合的名称

for (set<type>::iterator i = var.begin(); i != var.end(); i++) {
   type element = *i;
}

最好的方法是使用boost::foreach。上面的代码将简单地变成:

BOOST_FOREACH(type element, var) {
   /* Here you can use var */
}

您也#define foreach BOOST_FOREACH可以这样做:

foreach(type element, var) {
   /* Here you can use var */
}

例如:

foreach(int i, name_of_set) {
   cout << i;
}
于 2009-12-23T19:08:31.577 回答
6

使用迭代器:

std::set<int> si;
/* ... */
for(std::set<int>::iterator it=si.begin(); it!=si.end(); ++it)
    std::cout << *it << std::endl;

请注意,MSDN 和 cplusplus.com 等许多参考资料都提供了示例 -一个示例。;)

于 2009-12-23T19:07:44.530 回答
3

要列出集合中的所有元素,您可以执行以下操作:

#include <iostream>
#include <set>
using namespace std;

int main ()
{
  int myints[] = {1,2,3,4,5};
  set<int> myset (myints,myints+5);

  set<int>::iterator it;

  cout << "myset contains:";
  for ( it=myset.begin() ; it != myset.end(); it++ )
    cout << " " << *it;

  cout << endl;

  return 0;
}

要检查集合中的特定元素是否存在,您可以使用集合 STL 类中的 find() 方法

于 2009-12-23T19:12:06.980 回答
3

对于 C++11 和更新版本:

std::set<int> my_set;
for (auto item : my_set)
    std::cout << item << endl;
于 2016-09-23T09:23:22.310 回答
2

我喜欢使用 C++0x lambda 语法在 VS2010 Beta2 中看到的内容:

std::for_each( s.begin(), s.end(), 
               [](int value)
               { 
                  // what would be in a function operator() goes here.
                  std::cout << value << std::endl; 
               } );
于 2009-12-24T06:31:36.423 回答
0
set<int> os;
for (auto itr  = os.begin(); itr != os.end() ; ++itr) cout << *itr << endl;
于 2015-12-03T03:42:50.760 回答