У меня есть std :: vector, скажем, целые числа для простоты.итерация контейнера STL не из .begin() ing и wrap вокруг
std::vector<int> ivec;
ivec.push_back(1);
ivec.push_back(2);
... //omitting some push back's 3 to 99
ivec.push_back(100);
Стандартный способ итерации известно
std::map<int>::iterator it;
for(it = ivec.begin(); it != ivec.end(); it++)
print();
Это итерация напечатает 1,2,3, ... 100.
Я хочу, чтобы пройти все векторные элементы, начиная с предопределенный индекс, а не из него. begin(). Я хотел бы напечатать
3,4,5,6 ... 99, 100, 1, 2
Можете ли вы поделиться своими мыслями здесь?
Это может нормально сделать это в два этапа
for(it = ivec.begin()+index; it != ivec.end(); it++) and then (if index !=0)
for (it = ivec.begin; it = it = ivec.begin() + (index-1); it++)
Вы можете написать оболочку итератора, которая отображает желаемое поведение. Но если вам это нужно больше, чем пару раз, это, вероятно, слишком велико. – fredoverflow
Ознакомиться с буфером кругового буфера: http://www.boost.org/doc/libs/1_48_0/libs/circular_buffer/doc/circular_buffer.html – fouronnes
Ваш последний пример неправильный. Во втором цикле условие должно быть 'it! = Ivec.begin() + index' (конечно, это работает только для случайных итераторов), и вам не нужно, чтобы' if index! = 0', условие цикла делает это для вас. –