C++ 对for循环中的向量元素求和,并在一定数量的向量元素之后重置求和
让我们定义两个向量,它们的大小是30。我想把u推回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
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);