0

たとえば、乱数の配列があります

6 5 4 4 8

並べ替えて、後で印刷するときに同じ番号を削除/無視する必要があるため、すべてを並べ替えて、bubble sorth algorithmこのようなものを取得しました

4 4 5 6 8

異なる数字のみを印刷するために、これを書きましたfor loop

for(int i=0;i<n;i++){
    if(mrst[i]!=mrst[i-1] && mrst[i]>0){
        outFile << mrst[i] << " ";
    }
}

私の質問は、私が持っている配列は [0:12] の間隔にありますが、初めて呼び出したときに、-1 の配列インデックスをチェックして、以前に同じ番号があったかどうかを確認しますが、そうではありません。実際には存在しますが、そこに格納されている値は通常非常に大きいため、4 が格納されている可能性があり、そのために最初の数字が出力されません。もしそうなら、それを防ぐ方法は、最適になるようにコードを書き直しますか?

4

3 に答える 3

1

基本的に、ヒープ内の任意の場所から読み取ることができます。したがって、 mrst[-1] はメモリからゴミを与える可能性があります。しかし、これは本当に避けるべきです。あなたの場合、「mrst[i]!=mrst[i-1] && mrst[i]>0」を「i==0 || mrst[i]!=mrst[i-1]」に変更するだけです。

C++ では、「A || B」は、「A」が OK の場合は「B」を実行しないでください。

于 2013-05-28T14:23:33.117 に答える