Итераторы для STD :: Накопить - PullRequest
1 голос
/ 06 июля 2019

Похоже, ошибка с 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 Ответ

4 голосов
/ 06 июля 2019

Проблема в том, что 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)  );
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...