Как получить int позицию векторного цикла - PullRequest
0 голосов
/ 18 октября 2018

Как получить int позицию этого цикла?Спасибо.

auto a = vect.begin();
auto b = vect2.begin();
auto c = vect3.begin();
for (; a != vect.end() && b != vect2.end() && c != vect3.end(); a++, b++, c++) {

}

Мне нужно напечатать значения другой переменной, но мне нужно получить фактическую позицию без знака int этого векторного цикла.

Мне нужно напечатать двойной вектор, используя эту позициюэтого вектора.

И как получить последний индекс вектора.

Моя проблема для цикла for с несколькими векторами и получения из него индекса рядом с использованием только последнего из индексов.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Как показывает Angew, простой индексированный цикл может быть предпочтительнее, когда вам нужны индексы.

Однако можно получить индекс и от итератора:

auto a = vect.begin();
auto b = vect2.begin();
auto c = vect3.begin();
for (/*the loop conditions*/) {
    auto index = a - vect.begin();
}

ItТакже возможно получить индекс прямого итератора, используя std::distance, но было бы неразумно использовать его в цикле, поскольку сложность будет линейной для итераторов без произвольного доступа.

ВВ случае прямых итераторов (и общего кода, который должен поддерживать прямые итераторы), вы можете написать цикл, который имеет как переменную индекса, так и итераторы.

PS потенциально предпочтительно использовать предварительное увеличение с итераторами.Вероятно, имеет значение только в отладочной сборке.

0 голосов
/ 18 октября 2018

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

for (
  size_t idx = 0, idxEnd = std::min({vect.size(), vect2.size(), vect3.size()});
  idx < idxEnd;
  ++idx
)
{
  auto& obj1 = vect[idx];
  auto& obj2 = vect2[idx];
  auto& obj3 = vect3[idx];
}

(Приведенный выше код инициализирует idxEnd один раз в начале цикла, так что он не излишне пересчитывается на каждомитерация. Это просто оптимизация).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...