Задача: Вывести каждый k-элемент set, начиная с какого-то. Если начинать с начала, то всё хорошо:
#include <bits/stdc++.h>
using namespace std;
int main()
{
set <int> a;
for (int i = 1; i<=10; i++)
{
a.insert(i);
}
/**< Выводим все значения на нечётных позициях, начиная с первого элемента */
for (auto it = a.begin(); it != a.end(); advance(it, 2))
{
cout << *it << ' ';
}
cout<<endl;
}
Если сдвигаю вывод, то вывод зацикливается при некоторых позициях сдвига и размере сдвига.
ЭТО ПОВИСНЕТ:
#include <bits/stdc++.h>
using namespace std;
int main()
{
set <int> a;
for (int i = 1; i<=10; i++)
{
a.insert(i);
}
/**< Если нужно начинать не с первого то */
auto it = a.begin();
advance(it, 1);
for (it ; it != a.end(); advance(it, 2))
{
cout << *it << ' ';
}
}
Я так понимаю программа зацикливается из-за того, что итератор никогда не становится равным a.end(), у кого есть знания, как такое можно записать правильно?
Единственное, что смог придумать — завел переменную, в которой держал "текущий номер" элемента set.
#include <bits/stdc++.h>
using namespace std;
int main()
{
set <int> a;
for (int i = 1; i<=10; i++)
{
a.insert(i);
}
/**< Если нужно начинать не с первого, то */
auto it = a.begin();
advance(it, 1);
int i = 1;
for (it ; it != a.end(); advance(it, 2))
{
i +=2;
if (i>a.size())
{
break;
}
cout << *it << ' ';
}
}