【问题标题】:How to get the elements in a set in C++? [duplicate]如何在 C++ 中获取集合中的元素? [复制]
【发布时间】:2010-12-29 14:37:50
【问题描述】:

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

【问题讨论】:

  • 以下两个答案都是正确的,但更直接一点:使用递增 (++) 和递减 (--) 运算符在结果集中向前或向后移动迭代器。

标签: c++ set stdset


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    使用迭代器:

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

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

    【讨论】:

      【解决方案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() 方法

      【讨论】:

        【解决方案4】:

        对于 C++11 及更高版本:

        std::set<int> my_set;
        for (auto item : my_set)
            std::cout << item << endl;
        

        【讨论】:

          【解决方案5】:

          我喜欢使用 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; 
                         } );
          

          【讨论】:

            【解决方案6】:
            set<int> os;
            for (auto itr  = os.begin(); itr != os.end() ; ++itr) cout << *itr << endl;
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-05-02
              • 2015-11-23
              • 2020-11-12
              • 1970-01-01
              • 2022-12-08
              • 2012-11-21
              相关资源
              最近更新 更多