c++ - 分配 vector 的前缀和并将结果存储在静态 vector 中

标签 c++ static

假设有一个函数定义,例如:

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/

相关文章:

c++ - 使用 pthread 来利用多核的问题

c++ - 如何使用私有(private)对象成员初始化对象,构造函数将非常量引用作为参数

java - 设计实现代码: static or dynamic?

java - 通过对象访问时静态最终字段和在声明时初始化的实例最终字段之间的差异

java - Servlet 中的静态变量

c++ - C++ 类的静态变量初始化,为什么要包含数据类型?

c++ - 如何确保数据类型与 C++ 中需要的一样大

c++ - 转换网络摄像头程序以处理一张图像

c++ - 我需要帮助过滤文本文件

c++ - 声明静态可变值的正确方法是什么