Как я могу вернуться к начальной точке, используя цикл for? - PullRequest
1 голос
/ 28 марта 2019

У меня есть std::vector<std::unique_ptr<object>> myObjects_ptrs. Мне нужно, начиная с одного из моих объектов, снова вернуться к тому, с чего начал.

Я делаю это следующим образом:

while(true)
{
    for(int i = 0; i < myObjects_ptrs.size(); ++i)
    {
        myObjects_ptr[i]->doSomething();
        //and here I need to circle back
        for(int j = i + 1; j < myObjects_ptr.size(); ++j)
        {
            //do some things with each other object
        }
        for(int j = 0; j < i; ++j)
        {
            //do the same things with the rest of the objects
        }
    }
}

Это стандартный способ сделать это? Моя проблема в том, что как только я что-то обнаруживаю, мне больше не нужно ходить вокруг. Например, если я нахожу что-то во время первого цикла, тогда нет необходимости проходить через второй цикл. Я решаю это путем добавления дополнительных if перед вторым циклом; но есть ли лучший способ?

Ответы [ 2 ]

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

Вы можете использовать модуль, то есть два внутренних цикла станут:

int numObjects = myObjects_ptr.size();
for (int j = i + 1; j < numObjects + i + 1; ++j)
{
  // Get object
  auto& obj = myObjects_ptr[j % numObjects];
}
1 голос
/ 28 марта 2019

Вы можете заменить два внутренних цикла на что-то вроде этого:

for(int j = i + 1;; j++)
{
    j %= myObjects_ptr.size();
    if (j == i)
    {
        break;
    }
    // Do stuff
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...