c++中向量中的元素除法

Posted

技术标签:

【中文标题】c++中向量中的元素除法【英文标题】:Division of elements in vector in c++ 【发布时间】:2018-07-14 20:20:15 【问题描述】:

我在 c++ 中有向量,例如 std::vector<double> v = 10.0, 5.0, 2.0。我想按顺序划分向量的所有元素,即 10/5.0 =2.0 然后 2.0/2.0 应该是 1。所以,最终的答案是向量的所有元素的划分。有什么方法可以有效地使用一些 STL 函数或算法。我不想使用for 循环。感谢您的帮助!

【问题讨论】:

我尝试像这样使用 std::divide std::accumulate(v.begin(), v.end(), 1.0, std::divides()) )。但我得到了错误的结果。 向量为空怎么办? 您在寻找std::partition 吗? 然后什么都不做。只是抛出一个错误 @DhruvinNaik 这样的调用相当于1.0 / 10.0 / 5.0 / 2.0,以你的例子为例。您是否尝试过 std::accumulate(v.begin() + 1, v.end(), *v.begin(), std::divides<double>())) 之类的方法(假设非空向量)? 【参考方案1】:

正如 @Algirdas Preidžius 在评论中提到的(我在答案弹出之前就开始写答案),您可能只是错过了算法应该从第一个数字开始而不是 除以它。这应该是您所期望的:

int main()

    std::vector<double> vec = 10, 5, 2;

    std::cout << std::accumulate(vec.cbegin() + 1, vec.cend(),
                                 vec[0], std::divides<>());

注意+ 1vec.cbegin()vec[0] 之后作为起始值

【讨论】:

以上是关于c++中向量中的元素除法的主要内容,如果未能解决你的问题,请参考以下文章

C++ 中的除法舍入

在 C++ 中调整整数除法的商

对PostgreSQL中数组类型列中的每个元素应用除法

如何找到压缩列表中的一个元素,其配对元素的除法最大值?

递归除法和 impera 二进制搜索中的错误

C++:模拟定点除法/乘法