使用 accumulate 计算替代总和
Using accumulate to calculate alternate sum
如果我像下面这样在 C++ 中使用 accumulate 函数
std::vector<int> v2{1, 2, 3, 4, 5};
int sum = 0;
std::cout << std::accumulate(v2.begin(), v2.end())
它将简单地对所有数字求和。但是我想计算 1-2+3-4+5
我在想办法分别累加1,3,5和2,4然后做
但不确定如何使用 accumulate 来实现。
这是我的快速解决方案:
int sign = -1; // start with minus first (e.g. 1-2)
std::vector<int> values{ 1, 2, 3, 4, 5 };
auto value = std::accumulate(values.begin(), values.end(), 0, [&sign](int total, int value)
{
sign = -sign;
return total + (sign)*value;
});
I wanted to calculate 1-2+3-4+5
I was thinking of some way to accumulate 1,3,5 and 2,4 separately and then do it
这是解决问题的一个很好的方法。标准库还没有 stride
视图(虽然它有 drop
),你可以写
int sum = accumulate(v2 | stride(2), 0) -
accumulate(v2 | drop(1) | stride(2), 0);
在添加 stride
之前,您可以使用 range-V3 库执行此操作。
std::accumulate
我根本懒得用,不太合适。相反,只需使用两个循环:
int result = 0;
size_t n = v2.size ();
for (size_t i = 0; i < n; i += 2)
result += v2 [i];
for (size_t i = 1; i < n; i += 2)
result -= v2 [i];
如果我像下面这样在 C++ 中使用 accumulate 函数
std::vector<int> v2{1, 2, 3, 4, 5};
int sum = 0;
std::cout << std::accumulate(v2.begin(), v2.end())
它将简单地对所有数字求和。但是我想计算 1-2+3-4+5
我在想办法分别累加1,3,5和2,4然后做
但不确定如何使用 accumulate 来实现。
这是我的快速解决方案:
int sign = -1; // start with minus first (e.g. 1-2)
std::vector<int> values{ 1, 2, 3, 4, 5 };
auto value = std::accumulate(values.begin(), values.end(), 0, [&sign](int total, int value)
{
sign = -sign;
return total + (sign)*value;
});
I wanted to calculate 1-2+3-4+5
I was thinking of some way to accumulate 1,3,5 and 2,4 separately and then do it
这是解决问题的一个很好的方法。标准库还没有 stride
视图(虽然它有 drop
),你可以写
int sum = accumulate(v2 | stride(2), 0) -
accumulate(v2 | drop(1) | stride(2), 0);
在添加 stride
之前,您可以使用 range-V3 库执行此操作。
std::accumulate
我根本懒得用,不太合适。相反,只需使用两个循环:
int result = 0;
size_t n = v2.size ();
for (size_t i = 0; i < n; i += 2)
result += v2 [i];
for (size_t i = 1; i < n; i += 2)
result -= v2 [i];