Суммирование векторных элементов в a для l oop и сброс суммирования после определенного числа векторных элементов - PullRequest
0 голосов
/ 10 апреля 2020

Давайте определим два вектора, их размер равен 30. Я хочу push_back к суммированному значению vector2 в диапазоне vec1 элементов: 1-6, 7-12,13-18,19-24. Что означает, что я сбрасываю суммированное значение с vec2 после завершения vec1 элементов 6, 12, 18 и т. д. (включая их повторение).

Например, первая сумма из вектора 2 будет завершена в vec2[19], поскольку элементы vec1 6 заканчиваются в этой позиции. Затем мы можем сбросить сумму = 0 и начать все заново таким же образом. На каждом этапе я хотел бы вернуть сумму обратно в новый вектор и продолжить процесс.

#include<iostream>
#include<vector>

using namespace std;

// return type vector
int main(){
vector<double> summed;
int limit = 6;
double sum = 0;

    vector <int> vec1 {1,1,1,1,1,2,3,3,3,3,3,3,3,3,4,4,4,6,6,6,10,10,10,10,12,13,14,14,15,16,20};
    vector <double> vec2 {100,1,1200,1130,1140,20,3,32,33,34.0,3,23,3,33,4,43,4,6,36,64,1201,10,120,10,12,13,14,124,125,16,20};


for (int i = 0; i < vec2.size(); ++i)
    if (vec1[i] <= limit)
        sum += vec2[i];
    else
    {
        summed.push_back(sum);
        limit += 6;
        sum = vec2[i];
    }
for (int i =0; i<=summed.size(); i++)
{
 cout << " the elements of the summed vector "<<summed[i] <<endl;
}
}

ВЫХОД:

     the elements of the summed vector 3912                                                                                                
 the elements of the summed vector 1353                                                                                                
 the elements of the summed vector 292                                                                                                 
 the elements of the summed vector 0

Четыре группы из vec1 элементов

1,1,1,1,1,2,3,3,3,3,3,3,3,3,4,4,4,6,6,6,
10,10,10,10,12,
13,14,14,15,16,
20

1 Ответ

1 голос
/ 10 апреля 2020

Если я правильно понимаю ваш вопрос, это то, что вы ищете:

vector<double> summed;
int limit = 6;
double sum = 0;
for (int i = 0; i < vec2.size(); ++i)
{
    if (vec1[i] <= limit)
        sum += vec2[i];
    else
    {
        summed.push_back(sum);
        limit += 6;
        sum = vec2[i];
    }
}
summed.push_back(sum);

Обратите внимание, что это предполагает, что vec1 отсортировано в порядке убывания.

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