给我一段c++用struct封装的二维前缀和模板,变量名尽量简单
时间: 2024-09-16 20:06:14 浏览: 91
C++ 使用模板实现一个List的实例
在C++中,我们可以使用`std::vector`和模板结构体来创建一个二维数组的前缀和(Prefix Sum)数据结构。前缀和也叫累积求和,它存储了每个元素及其到该位置为止所有元素之和,以便快速计算任意区间内的和。以下是一个简单的`Struct`封装示例:
```cpp
#include <vector>
// 使用template定义一个二维数组的前缀和结构体
template<typename T>
struct PrefixSum {
std::vector<std::vector<T>> prefix_sum; // 二维数组用于存储原值和前缀和
// 构造函数,初始化一个空的二维数组
PrefixSum(std::size_t rows, std::size_t cols) :
prefix_sum(rows, std::vector<T>(cols + 1)) { // 额外加一列用于存储前缀和
for (std::size_t i = 0; i < rows; ++i)
prefix_sum[i][0] = static_cast<T>(0); // 初始化首行和首列的前缀和为0
}
// 计算并设置给定范围的前缀和
void calculate_prefix_sum(const std::vector<std::size_t>& row_indices, const std::vector<std::size_t>& col_indices) {
for (std::size_t i = 0; i < row_indices.size(); ++i) {
T sum = 0;
for (std::size_t j = col_indices[i]; j > 0; --j)
sum += prefix_sum[row_indices[i]][j];
prefix_sum[row_indices[i]][col_indices[i]] = sum;
}
}
// 获取指定索引处的前缀和
T get_prefix_sum(std::size_t row, std::size_t col) {
if (col == 0)
return prefix_sum[row][0];
else
return prefix_sum[row][col] - prefix_sum[row][col - 1];
}
};
```
阅读全文