2

私は C++ で演習を書いています。私には有効と思われるコードを書きましたが、私はまだ初心者なので、誰かがそれをチェックして、彼らが同じかどうか。

ソリューション コード:

Point *PointArray::get( const int pos) {
    return pos >= 0 && pos < size ? points + pos : NULL;
}

私のコードは次のとおりです。

Point* PointArray::get (const int position) {
    return &(data[position]);
}

私のコードでは、nullポインターを返すかどうかを確認するために条件を確認する必要があることを認識していますが、それ以外は私のバージョンはpoints + pos

points&dataは Point クラスの配列です。私は鉱山データと名付けました。ソリューションはそれをポイントと名付けました。

編集:

条件を追加した後の私のコード:

Point* PointArray::get (const int position) {
    return ((position >= 0 && position < size) ? &(data[position]) : NULL);
}
4

1 に答える 1

5

一言で言えば、彼らは同じことをします。ただし、いくつかの違いがあります。

1) ソリューション コードは、配列の境界をチェックします。あなたのソリューションはそうではありません。

2) ソリューションはポインター演算を使用し、余分な逆参照/アドレス操作を回避します (ほとんどのコンパイラーはこれを最適化します)。効率: 配列 vs ポインターを参照してください。

于 2012-04-22T08:16:10.507 に答える