c++ - 运行时错误:引用绑定到“int”类型的空指针 (stl_iterator.h)
问题描述
有人可以帮我解决这个错误吗?
我在 LeetCode 上做练习时遇到了一个问题。
问题是在 [n*m] 二维数组中找到一个数字。
在一个n * m的二维数组中,每一行从左到右升序排序,每一列从上到下升序排序。请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否包含整数。
0 <= n <= 1000
0 <= m <= 1000
例如
/**********input********/
matrix:[
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]
target:5
/**********output********/
true
我的解决方案是:
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
if(matrix.empty()) return false;
vector<vector<int>>::iterator row;
vector<int>::iterator column;
for(row=matrix.begin();row!=matrix.end();row++){
if(target<*(*row).begin()) return false;
for(column=(*row).begin();column!=(*row).end();column++){
if(target==*column)return true;
else if(target<*column)break;
}
}
return false;
}
};
当输入为 [[ ]] 时出现运行时错误:引用绑定到类型为“int”的空指针 (stl_iterator.h)。
摘要:UndefinedBehaviorSanitizer:未定义行为/usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/stl_iterator.h :797:16
在此先感谢您的帮助!
解决方案
您的解决方案看起来有点复杂。您只需要遍历外部向量和所有内部向量并true
在找到匹配项时返回。
bool findNumberIn2DArray(const vector<vector<int>>& matrix, int target) {
for(const auto& inner : matrix) {
for(int value : inner) {
if(value == target) return true;
}
}
return false;
}
您也可以使用std::find_if
andstd::find
来查找元素。您在内部向量上std::find_if
执行的 lambda 和内部提供一个 lambda 。std::find
例子:
#include <algorithm>
bool findNumberIn2DArray(const vector<vector<int>>& matrix, int target) {
auto it = std::find_if(matrix.begin(), matrix.end(), [&target](const auto& v) {
auto it = std::find(v.begin(), v.end(), target);
return it != v.end();
});
return it != matrix.end();
}
推荐阅读
- azure - 在存在扩展时重置 Azure VM 规模集上的密码
- r - R中基于时间序列和组的数据分区
- vb.net - 饼图中的标签重叠
- c# - Chrome selenium 更改配置文件和下载目录
- visual-studio-code - 打开时 VS Code 空白屏幕
- python - 如何使用 Python 在 Visual Studio 中显示 matplotlib 图像
- java - 如何在使用 tabnine 时还显示 eclipse 自动完成建议?
- python - Django 项目中无法识别 HTML 文件
- html - 如何在 HTML 中引用来自不同文件夹的图像(使用 Markdown 时)?
- python - general_functions.write_log_line('globals.reason_codes_on_screen[z]' + globals.reason_codes_on_screen[z]) 行的索引超出范围