У меня другой вопрос, потому что я не ищу range-3v
решения. Кроме того, я специально спрашивал, как исправить проблему со вторым циклом. Я принял ответ ниже моего вопроса уже. Поскольку мне не понадобился второй цикл for, они показали мне, как использовать один индекс, добавив в него 1
для нечетных итераций. Это решило мою проблему!
Я пишу функцию, которая будет принимать вектор, предполагая, что он имеет четную длину элементов; В моей функции я создаю два временных вектора из исходного вектора, где их элементы равны {0,2,4,6,...}
и {1,3,5,7,...}
соответственно. Затем я добавляю соответствующие проиндексированные элементы и сохраняю результаты в моем векторе результатов.
Вот моя функция:
void sumElementPairsFromVector(const std::vector<int>& values, std::vector<int>& result)
{
using It = std::vector<int>::const_iterator;
std::vector<int> temp1, temp2;
// First lets divide the original vector into two temp vectors
for (It it1 = values.cbegin(); it1 != values.cend(); it1 += 2)
temp1.push_back(*it1);
for (It it2 = values.cbegin() + 1; it2 != values.cend() ; it2 += 2)
temp2.push_back(*it2);
// Add each corresponding vector and store that into our results.
for (std::size_t i = 0; i < values.size() / 2; i++)
result[i] = temp1[i] + temp2[i];
}
Вот как я это использую:
int main()
{
std::vector<int> values{ 1,2,3,4,5,6 };
for (auto i : values)
std::cout << i << " ";
std::cout << '\n';
std::vector<int> results;
sumElementPairsFromVector(values, results);
for (auto i : results)
std::cout << i << " ";
std::cout << '\n';
return 0;
}
Ожидаемый результат должен быть:
1 2 3 4 5 6
3 7 11
Ошибка отладки в этой строке кода функции:
for (It it2 = values.cbegin() + 1; it2 != values.cend(); it2 += 2 )
Я знаю, что является причиной ошибки; на последней итерации после того, как она увеличивается на 2
и идет, чтобы проверить, it2 != values.cend()
идет ли она после конца вектора. Как мне это исправить?