假设有一个函数定义,例如:
int PrefixSum(vector<int>& nums, int pos) {
static vector<int> prefixsum = ....
return nums[pos];
}
我想预先计算前缀和 vector ,因为该函数将被多次调用。
假定nums vector 不变,所以静态前缀和 vector 是有效的。
另外,由于遗留目的,我无法更改函数定义。
最佳答案
一种简单的方法可以如下所示
#include <iostream>
#include <vector>
#include <iterator>
#include <numeric>
long long int PrefixSum( const std::vector<int>& nums,
std::vector<long long int>::size_type pos )
{
static std::vector<long long int> prefixsum;
if ( prefixsum.empty() )
{
prefixsum.reserve( nums.size() );
std::partial_sum( std::begin( nums ), std::end( nums ),
std::back_inserter( prefixsum ) );
}
return prefixsum[pos];
}
int main()
{
std::vector<int> v = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
std::cout << PrefixSum( v, v.size() - 1 ) << '\n';
return 0;
}
程序输出为
45
关于c++ - 分配 vector 的前缀和并将结果存储在静态 vector 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59646798/