mam ten kod:Jak iterować std :: set?
std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it)
{
u_long f = it; // error here
}
nie ma wartości ->first
. Jak mogę uzyskać wartość?
mam ten kod:Jak iterować std :: set?
std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it)
{
u_long f = it; // error here
}
nie ma wartości ->first
. Jak mogę uzyskać wartość?
Musisz usunąć deskryptor iteratora w celu odzyskania elementu zestawu.
std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it)
{
u_long f = *it; // Note the "*" here
}
Jeśli masz C++ 11 funkcje, można użyć range-based for loop:
for(auto f : SERVER_IPS) {
// use f here
}
Wystarczy użyć *
przed it
:
set<unsigned long>::iterator it;
for (it = myset.begin(); it != myset.end(); it++) {
cout << *it;
}
Ten dereferences go i pozwala na dostęp do elementu, którego iterator jest aktualnie włączony.
Po prostu drobna uwaga: na ogół zaleca się użycie ++ zamiast pętli ++ w celu uniknięcia dodatkowej kopii iteratora. – user2891462
Jest to kompletne rozwiązanie do pytania:
Jak iteracyjne 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;
}
Albo nawet 'dla (auto i: mset) std :: cout << i;' –
Innym przykładem dla C++ 11 standart:
set<int> data;
data.insert(4);
data.insert(5);
for (const int &number : data)
cout << number;
@ Mr.C64 nie to, że wiele spraw z integralnych typów jak w tym przypadku. –
Warto zauważyć, że jeśli chcesz zmodyfikować kontener, musisz użyć pierwszego. Dla takich googlerzy. –
I thing C++ 11 rozwiązanie powinno być z odniesieniem (auto & f). W większości przypadków jest to lepsze. W tym konkretnym przypadku. – jaskmar