Подтвердить что ты не робот

Как повторить std:: set?

У меня есть этот код:

std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it)
{
    u_long f = it; // error here
}

Нет значения ->first. Как я могу получить значение?

4b9b3361

Ответ 1

Вы должны разыменовать итератор, чтобы получить член вашего набора.

std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it)
{
    u_long f = *it; // Note the "*" here
}

Если у вас есть возможности С++ 11, вы можете использовать цикл for на основе диапазона:

for(auto f : SERVER_IPS) {
  // use f here
}    

Ответ 2

Просто используйте * перед it:

  set<unsigned long>::iterator it;
  for (it = myset.begin(); it != myset.end(); ++it) {
      cout << *it;
  }

Это разыменовывает его и позволяет получить доступ к элементу, на котором в данный момент находится итератор.

Ответ 3

Еще один пример для стандарта С++ 11:

set<int> data;
data.insert(4);
data.insert(5);

for (const int &number : data)
  cout << number;

Ответ 4

Это полное решение вопроса:

Как вы повторяете 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;
}