c++ - C++ 不能取消引用结束列表迭代器
问题描述
我正在使用 transform 和 plus() 来合并 2 个列表,它会引发无法取消引用结束列表迭代器的错误。有人可以帮忙吗?谢谢
list<int> add(const list<int> & data1, const list<int> & data2) noexcept {
list<int> output;
if (data1.size() == data2.size())
{
transform(data1.begin(), data1.end(), data2.begin(), output.begin(),plus<int>());
return output;
}
return output;
}
解决方案
transform 不会创建新元素,它只是写入您给它的第四个迭代器。因此,您需要先调整列表的大小:
list<int> add(const list<int> & data1, const list<int> & data2) noexcept {
list<int> output(data1.size());
if (data1.size() == data2.size())
{
transform(data1.begin(), data1.end(), data2.begin(), output.begin(),plus<int>());
return output;
}
return output;
}
或者使用一个后插入迭代器,它会在你的列表中为每个元素自动调用“push_back”:
list<int> add(const list<int> & data1, const list<int> & data2) noexcept {
list<int> output;
if (data1.size() == data2.size())
{
transform(data1.begin(), data1.end(), data2.begin(), std::back_inserter(output),plus<int>());
return output;
}
return output;
}
令人困惑的错误可能是由于对于一个空列表begin() == end()
,因此 transform 正在有效地尝试执行以下操作:
*output.end() = result;
推荐阅读
- python - 如何让我的按钮增加我的迭代值并在网站上显示效果?(django)
- javascript - 如何在 mat-select 的两行中显示数据?
- java - 我对 firebase 和 imageView 有疑问
- ajax - 如何使用 Leaflet 中的 AJAX 调用更改从 GeoJSON 中获取的线条的样式?
- ios - 在 tableView.reloadData() 上修改 Realm 数据崩溃
- javascript - 如何防止功能组件中的重新渲染错误?
- javascript - 数据作为变量名指针js
- reactjs - nextjs 站点地图错误。类型错误:无法分配给对象“#”的只读属性“未定义”