首页 > 解决方案 > std::accumulate 的迭代器

问题描述

错误似乎与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)  );
    }
}

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

标签: c++c++11

解决方案


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

推荐阅读