【问题标题】:Division of elements in vector in c++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>())) 之类的方法(假设非空向量)?

标签: c++ algorithm stl


【解决方案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] 之后作为起始值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    相关资源
    最近更新 更多