gpt4 book ai didi

c++ - 自动识别合适的类型,足够大且足够精确,以保存容器中所有元素的总和

转载 作者:太空宇宙 更新时间:2023-11-03 10:25:01 25 4
gpt4 key购买 nike

(这个问题已经从原来的问题中进行了戏剧性的编辑,没有改变原始问题的真正意图)

如果我们将 vector<int> 中的所有元素相加,那么答案可能会溢出,需要像 intmax_t 这样的东西以准确不溢出存储答案。但是intmax_t不适合 vector<double> .

我可以手动指定类型:

template<typename>
struct sum_traits;

template<>
struct sum_traits<int> {
typedef long accumulate_safely_t;
};

然后按如下方式使用它们:

template<typename C>
auto sum(const C& c) {
sum_traits<decltype(c.begin())> :: accumulate_safely_t> r = 0;
for(auto &el: c)
r += el;
return r;
}

我的问题:是否可以自动识别一个合适的类型,一个大而准确的类型,这样我就不必通过类型特征手动指定每个类型?

最佳答案

您的代码的主要问题是 auto r = 0 等同于 int r = 0。那不是你的 C++98 代码的工作方式。一般来说,你找不到完美的目标类型。您的代码只是 std::accumulate 的一个变体,所以我们可以看看标准是如何解决这个问题的:它允许您传入累加器的初始值及其类型:long sum = std::accumulate(begin, end, long{0});

关于c++ - 自动识别合适的类型,足够大且足够精确,以保存容器中所有元素的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39385263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com