首页 > 解决方案 > 运行时错误:引用绑定到“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

在此先感谢您的帮助!

标签: c++

解决方案


您的解决方案看起来有点复杂。您只需要遍历外部向量和所有内部向量并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_ifandstd::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();
    }

推荐阅读