gpt4 book ai didi

c++ - 使用嵌套的 for 循环对 vector 中的元素求和

转载 作者:行者123 更新时间:2023-12-05 08:36:08 27 4
gpt4 key购买 nike

我正在尝试对 vector 的值求和,但我对此有疑问。

vector 的大小是 20 个元素,我正在尝试对当前位置的 5 个元素求和。

类似于:将 1 到 5、2 到 6、3 到 7 等等的元素相加。

我认为我可以做一个 for 嵌套循环,如下所示:

for (int a = 0; a < numVec.size(); a++) {
for (int b = a; b < numVec.size(); b++)
{
if (aux < 5) {
cout << "B: " << b << endl;
sum += numVec[b].num;
}

if (aux > 4) {
aux = 0;
sumAux= sum;
sum= 0;
break;
}

aux++;
}
cout << "Sum: " << sumAux<< endl;
}

但是当我获得第 15 名时遇到了一些问题,一切都出错了,我不明白为什么。

everything goes wrong

如果你能帮助我,我非常感谢你。

最佳答案

如果您在开始编写代码之前考虑更长时间,这将对您有很大帮助。也许你可以拿一张纸写下一些东西。

然后,如果您选择长而清晰的变量名,它将对您有很大帮助。

那么,让我们来画一张吧。我们在存储它们的 vector 中写入一些测试值及其索引。请记住。在 C++ 中,索引从 0 开始。

Value:   21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
Index: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

所以,如果我们现在想为每个值构建 5 个值的总和,那么我们需要添加

Index   0  1  2  3  4      Value: 21 22 23 24 25
Index 1 2 3 4 5 Value: 22 23 24 25 26
Index 2 3 4 5 6 Value: 23 24 25 26 27

. . .

Index 14 15 16 17 18 Value: 35 36 37 38 39
Index 15 16 17 18 19 Value: 36 37 38 39 40

所以,你可以看到。我们有一个始终会递增 1 的起始索引。从这个起始索引开始,我们将始终添加 5 个值。但是我们必须结束这个过程,正如您在上面的索引 15 处看到的,所以 20 - 5。因此,始终是整个数组的大小 - 子数组的大小。

所以,让我们先解决这个问题,我们可以直接解决这个问题:

#include <iostream>
#include <vector>

int main() {
// Our test data to play with
std::vector<int> data = { 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40 };

// This is the size of the subarray. So the number of values that we want to sum up
int sizeOfSubarray = 5;

// And because we have a subarray size, the last summation starts at this index
int lastIndex = data.size() - sizeOfSubarray;

// So, now iterate over all data that needs to be summed up
for (int startIndex = 0; startIndex <= lastIndex; ++startIndex) {

// Because we have a new start index now, we start also with a 0 sum
int sum = 0;

// Calculate the end index of the sub array
int endIndexOfSubarray = startIndex + sizeOfSubarray;
for (int sumIndex = startIndex; sumIndex < endIndexOfSubarray; ++sumIndex) {

// Some debug output
std::cout << "Startindex: " << startIndex << "\tSumindex: " << sumIndex << "\tValue: " << data[sumIndex] << '\n';

// Calculate the subarray sum
sum = sum + data[sumIndex];
}
// Show the subarray sum
std::cout << "Sum: " << sum << '\n';
}
}

好的,明白了。如果我们还想把数组的末尾的值相加怎么办?那么,如果 startindex 将遍历整个数组怎么办。让我们看看这个。

Index   16 17 18 19  ?     Value: 37 38 39  40 ?
Index 17 18 19 ? ? Value: 38 39 40 ? ?
Index 18 19 ? ? ? Value: 39 40 ? ? ?
Index 19 ? ? ? ? Value: 40 ? ? ? ?

您可以看到,起始索引一直运行到 < 20。所以 < vector 的大小。

如果求和的结束索引 > 19,那么 >= vector 的大小,我们可以将其限制为 19,

我们可以计算或使用简单的 if 语句。

然后代码看起来像这样

#include <iostream>
#include <vector>

int main() {
// Our test data to play with
std::vector<int> data = { 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40 };

// This is the size of the subarray. So the number of values that we want to sum up
int sizeOfSubarray = 5;

// So, now iterate over all data that needs to be summed up
for (int startIndex = 0; startIndex < data.size(); ++startIndex) {

// Because we have a new start index now, we start also with a 0 sum
int sum = 0;

// Calculate the end index of the sub array
int endIndexOfSubarray = startIndex + sizeOfSubarray;

// If this index is too big ( > 20) then limit it to 20
if (endIndexOfSubarray > data.size()) {
endIndexOfSubarray = data.size();
}
// Claculate sum of sub array
for (int sumIndex = startIndex; sumIndex < endIndexOfSubarray; ++sumIndex) {

// Some debug output
std::cout << "Startindex: " << startIndex << "\tSumindex: " << sumIndex << "\tValue: " << data[sumIndex] << '\n';

// Calculate the subarray sum
sum = sum + data[sumIndex];
}
// Show the subarray sum
std::cout << "Sum: " << sum << '\n';
}
}

希望这个解释对你有帮助

关于c++ - 使用嵌套的 for 循环对 vector 中的元素求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70439723/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com