2009-12-23 77 views
11

我很困惑如何獲取集合中的元素。我認爲我必須使用迭代器,但是如何執行它?如何獲取C++中的集合中的元素?

+0

兩者下面的答案是正確的,但爲更直接的一點:迭代器向前或向後移動通過的結果使用所設定的增量(++)和減量( - )運營商。 – Toji 2009-12-23 19:12:02

回答

18

更換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; 
} 
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提供了範例 - 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; 
} 

要檢查集合中是否有特定元素,您可以使用set STL類中的find()方法

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; 
       }); 
0
set<int> os; 
for (auto itr = os.begin(); itr != os.end() ; ++itr) cout << *itr << endl; 
2

對於C++ 11和較新的:

std::set<int> my_set; 
for (auto item : my_set) 
    std::cout << item << endl; 
相關問題