c++ - std::accumulate 的迭代器

标签 c++ c++11

错误似乎与 std::accumulate() 或迭代器有关,或者我是否访问了无效指针?

int m = 0;
std::vector<int> v{4,-3,0,-5};
for(std::vector<int>::iterator i = v.begin(); i != v.end(); i++)
{
    for(std::vector<int>::iterator j = v.begin(); j != v.end(); j++)
    {
        m = max( m,  std::accumulate(i, j, 0)  );
    }
}

我试过上面的代码,但是程序意外停止了。

最佳答案

问题是j 可以小于i。这个版本有效

int m = 0;
std::vector<int> v{4,-3,0,-5};
for(std::vector<int>::iterator i = v.begin(); i!=v.end(); i++)
{
    for(std::vector<int>::iterator j = i; j!=v.end(); j++)
    //                             ^^^^^^
    {
        m = max( m,  std::accumulate(i, j, 0)  );
    }
}

关于c++ - std::accumulate 的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56912901/

相关文章:

c++ - 在 C++ 中将参数从一个函数传递到另一个函数

c++ - 在 C++11 中使用 std::sort 和 lambda 函数对动态分配的多维 C 数组进行排序

c++ - 为什么在这里未调用move构造函数?

c++ - 未调用/继承子类中的移动赋值运算符

c++ - 更好的事件处理机制?

c++ - 函数重载

c++ - 如何将C++模板方法的返回类型声明为其他类中静态方法的返回类型?

c++ - std::forward 和复制构造函数

c++11 - 组合模板类型的继承

c++ - Glew - 与 GLFW 配对时 gl- 函数符号的链接错误