给我一段c++封装的二位前缀和模板
时间: 2024-09-16 20:06:26 浏览: 22
在C++中,我们可以使用模板类和函数来实现二进制前缀和,这是一种用于高效计算数组元素之间和的操作。下面是一个简单的封装示例:
```cpp
template <typename T>
class PrefixSum {
private:
std::vector<T> prefix_sums; // 存储每个位置的前缀和
public:
// 构造函数,初始化所有元素为0
PrefixSum(const std::vector<T>& arr) : prefix_sums(arr.size(), 0) {
for (size_t i = 1; i < arr.size(); ++i) {
prefix_sums[i] = arr[i] + prefix_sums[i - 1];
}
}
// 获取任意索引处的前缀和
T getPrefixSum(size_t index) const {
if (index >= prefix_sums.size()) {
throw std::out_of_range("Index out of range");
}
return prefix_sums[index];
}
// 返回整个数组的和
T getTotalSum() const {
return prefix_sums.back();
}
};
// 使用示例
int main() {
int numbers[] = {1, 2, 3, 4, 5};
PrefixSum<int> sum(prefix_sums);
std::cout << "Prefix sum at index 2: " << sum.getPrefixSum(2) << std::endl;
std::cout << "Total sum: " << sum.getTotalSum() << std::endl;
return 0;
}
```
在这个例子中,`PrefixSum`模板类接受一个`T`类型的向量作为输入,并在构造函数中计算出前缀和。`getPrefixSum`方法用于查询特定索引的和,而`getTotalSum`方法则返回整个数组的和。