Вернитесь к началу Vector, как только достигнут конец c ++ - PullRequest
0 голосов
/ 08 марта 2019

В настоящее время у меня есть итератор, который случайным образом увеличивает вектор, и я хочу иметь возможность вернуться к вершине вектора после достижения конца. Я поместил семя в мой генератор случайных чисел, поэтому у меня та же последовательность. Очевидно, что в данный момент вектор просто выходит из области видимости

int main() 
{
vector<int> vectorTest = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 
10, 11, 12, 13, 14, 15, 16,
    17, 18, 19, 20};  

vector <int>::iterator it;

for (it = vectorTest.begin(); it != vectorTest.end(); it = it + rand() % 6)
{ 
    cout << *it << endl;    
}
}

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Вы можете использовать ranges::view::cycle для бесконечного повторения векторных элементов.

int main() 
{
    std::vector<int> vectorTest = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};  

    auto repeating = vectorTest | ranges::view::cycle;

    for (auto it = repeating.begin(); /* how to end? */; it = it + rand() % 6)
    { 
        std::cout << *it << std::endl;    
    }
}
1 голос
/ 08 марта 2019

Это не вариант использования итератора.Я предлагаю использовать общее индексирование, ограниченное по модулю длины вектора.

int j = 0;
for (int i = 0; j < 20 ; i = (i + rand() % 6) % vectorTest.size(), j++) {
    cout << vectorTest[i] << endl;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...