std :: accumulate的迭代器

时间:2019-07-06 09:40:55

标签: 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)  );
    }
}

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

1 个答案:

答案 0 :(得分:4)

问题在于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)  );
    }
}