2009-12-23 3 views
11

Ich bin verwirrt, wie man die Elemente in den Satz bekommt. Ich denke, ich muss den Iterator verwenden, aber wie gehe ich durch?Wie erhalten Sie die Elemente in einer Menge in C++?

+0

beiden Antworten unten korrekt sind, aber ein wenig mehr direkt zu sein: Iteratoren bewegen, vorwärts oder rückwärts durch das Ergebnis mit dem eingestellte inkrementiere (++) und dekrementiere (-) Betreiber. – Toji

Antwort

18

ersetzen type mit zum Beispiel int .. Und var mit dem Namen des Satzes

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

Der beste Weg ist jedoch boost::foreach zu verwenden. Der obige Code würde einfach werden:

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

können Sie tun auch #define foreach BOOST_FOREACH, so dass Sie dies tun:

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

Zum Beispiel:

foreach(int i, name_of_set) { 
    cout << i; 
} 
6

Verwendung Iteratoren:

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

Beachten Sie, dass viele Referenzen wie MSDN und cplusplus.com Beispiele bietet - one example. ;)

3

alle Elemente in der Liste unter Set Sie können etwas tun wie:

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

Um zu überprüfen, ob ein bestimmtes Element im Set ist oder nicht, können Sie die find() -Methode aus der Set-STL-Klasse verwenden

2

Ich mag, was ich in VS2010 Beta2 mit C++ 0x Lambda-Syntax sehe:

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

Für 11 C++ und neuere:

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