Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对for循环中的向量元素求和,并在一定数量的向量元素之后重置求和_C++_Vector - Fatal编程技术网

C++ 对for循环中的向量元素求和,并在一定数量的向量元素之后重置求和

C++ 对for循环中的向量元素求和,并在一定数量的向量元素之后重置求和,c++,vector,C++,Vector,让我们定义两个向量,它们的大小是30。我想把u推回vector2的求和值,在vec1元素的范围内:1-6,7-12,13-18,19-24。这意味着,一旦vec1元素6,12,18等完成(包括它们的重复),我就从vec2重置求和值 例如,vector2的第一个和将在vec2[19]处完成,因为vec16的元素结束于该位置。然后我们可以重置sum=0,并以相同的方式重新开始。每一步我都想把求和推回一个新的向量,然后继续这个过程 #include<iostream> #include&l

让我们定义两个向量,它们的大小是30。我想把u推回
vector2
的求和值,在
vec1
元素的范围内:
1-6,7-12,13-18,19-24。
这意味着,一旦
vec1
元素6,12,18等完成(包括它们的重复),我就从vec2重置求和值

例如,vector2的第一个和将在
vec2[19]
处完成,因为
vec1
6的元素结束于该位置。然后我们可以重置sum=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;
}
}
来自
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> 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);
向量求和;
整数极限=6;
双和=0;
对于(int i=0;i如果(vec1[i]这个短语“例如,vector2的第一个和将在vec2[19]处完成”是什么意思意思?这意味着范围
1-6
的第一段,vec1中的元素将在该位置完成。因此,我们从vec2中获取所有元素的总和,推回到一个新的向量,然后再次设置该零以重新开始。@Izero_字段,“我想推回向量2的求和值,”到目前为止,我认为你可以将向量推回到某个“求和值”。@vladfrommosco,它是关于向量元素vec2[I]的迭代求和。但是迭代将取决于向量元素的范围
vec[I]
。如果仍然不清楚,请告诉我?@zero\u字段号。以您为例,当
vec1[i]=10
时,if条件将在
i=20
第一次失败。此时,我们推当前和,如果我们设置
sum=0
,那么我们将错过
vec2[20]
因为
i
在下一次迭代中将
21
。sum不应该为0吗?;我已经根据您的建议更新了这个问题。在
vec1
中有5个组段,但是从
cout
中可以看出,向量大小似乎是4。明白了,但是第5个和在哪里?但是,
中的最后一个元素>vec1
表示
vec2
的和20。它不应该是0,对吗?事实上,它不是。我相应地更新了问题。啊,我明白了,
sum
必须在for循环结束后再次推回。对于给您带来的不便,我深表歉意。我更新了答案以解决该问题。
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);