c++ - 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) );
}
}
我试过上面的代码,但程序意外停止。
解决方案
问题是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 - 如何使 strtok 在令牌末尾包含换行符?
- visual-studio-code - 如何让我的构建在 VSCode 中生成多行问题消息?
- linux - 与 I/O(HID、SPI、GPIO)接口的 Raspberry Pi 程序
- python - 我怎样才能训练一个模型来接受每边的词向量并预测中间词?
- node.js - 部署nodejs+informixDB到heroku
- datatables - 使用数据表中的过滤列表发送多封电子邮件
- javascript - 对于具有固定数量字段的对象,使用一个 setter 方法还是多个方法更好?
- python - 为什么python中没有设置popitem?
- shell - 在 shell 中执行一个名称中包含空格的 python 文件
- python - 支持故障排除初学者类代码