1. ホーム
  2. c++

[解決済み] value_type'型のnullポインタへの参照バインディング

2022-02-07 20:15:08

質問

これはリートコード26です。ソートされた配列が与えられたとき、各要素が一度だけ現れるように重複をその場で取り除き、新しい長さを返せ。例題は以下の通り。 nums = [1,1,2] この関数が返すべきものは [1,2] .

以下は私のコードです。他の重複をすべて削除し、1つだけ残しています。しかし、私はいつも次のようなエラーが発生します。 reference binding to null pointer of type 'value_type' を送信してください。どなたか教えていただけると幸いです。

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int i = 0;
        while(i < nums.size() - 1) {
            if (nums[i] == nums[i + 1]) {
                nums.erase(nums.begin() + i);
            } 
            else i++;
        }
        return nums.size();
    }
};

解決方法は?

vector<T>::size() の型の値を返します。 size_t であり、符号なし型です。渡されたベクトルが空で、したがってベクトルの長さが0であるとします。 nums.size() - 1 は整数のアンダーフローを引き起こし、実際に比較することになります。 0 を非常に大きな正の数で表すことができます。これは真と評価され、ループが実行されます。 i 配列の境界を通過します。

これを修正するために nums.size()int を先取りするか、サイズを整数変数に格納して、それと比較します。