定義された要素の配列をクリアする。 - ページ 4

 
そうですね...完成度に限界はない。
 

ああ...プログラミングの怪物たち...

個人的には@Dmitry Fedoseevと 同じぐらい、最も理解しやすく、同時に効率的なコードをそれぞれ書くと、スピードも同じくらいになると思います。

ニコライ・セムコ氏(@Nikolai Semko)のコードは、かなり本格的な変態だと思いますが、便利なはずです。そして、1ミリ秒を大切にすることは、正しくて良いことだと思うのです。

 
Georgiy Merts:

ああ...プログラミングの怪物たち...

個人的には@Dmitry Fedoseevと 同じぐらい、最も理解しやすく、同時に効率的なコードをそれぞれ書くと、スピードも同じくらいになりますね。

ニコライ・セムコ氏(@Nikolai Semko)のコードは、かなり本格的な変態だと思いますが、便利なはずです。そして、1ミリ秒を大切にすることは、正しくて良いことだと思うのです。

どちらも、同じアイテムを何度もドラッグ&ドロップしてしまうのが気に入らない。バブルソートに例えると、大半のケースで最も遅いという感じです。DMSで行われているように、要素を削除するためにマークし(マークされた数をカウントしながら)、その後、マークされていない(一度だけ)要素は、残りの配列要素数を持つ新しいコピーに移動する方が、より単純で明確で信頼性が高いです。メモリの面では、これはさらにフラグ配列(「削除マーク付き」)のスペースだけを占有し、配列の2番目の短いコピーと元の配列を合わせても、ArrayResize 1回分に必要なメモリより多くは必要ではありません。また、削除するのが単一の値ではなく、配列であれば、常にそのすべての値を実行する必要がないため、フラグ処理を高速化することが可能です。そのためには、その中に最大値と最小値を定義し(文字列の場合はこれも可能)、minより小さい要素やmaxより大きい要素をマークせずにスキップする。

 
Dmitry Fedoseev:

最近、このスレッドと同じように水たまりに入り込んでいますね )

ウラジミール・パストゥシャク

実現するためのバリエーションを示す

Marketeerはすでに私が最適だと思うバリアントを、書いている、私はサイクルのサイズを取り出すことを除いて、重複の意味を理解していません。
 
Dmitry Fedoseev:

そのほうがいい。

最良の選択肢である、速度測定で確認すること。
 
TheXpert:

最近、このスレと同じように水たまりに入り込んでますね(笑)

Marketeerは、私が最適と考えるオプションをすでに書いており、私はそれを複製する意味がないと思う。

ああ、博士論文に失敗していたのか...。

 
Vladimir:

いずれも同じ要素のドラッグ&ドロップが複数回行われているのが気になります。

いずれの場合も、各要素は最大1回までドラッグされる。
 
TheXpert:
1つは42製品、もう1つは6製品、3つ目は30製品です。こんな問答で、中にどんなアホが いるのか想像するのが怖い

専門家」はすごい!彼は、 マーケットの魅力をさらけ出し、観客に光を与えました :-))私は専門家ではないかもしれませんが、個人的にはドミトリー・フェドセーエフに強く反対です...。

 
Denis Kirichenko:

しかし、個人的には、ドミトリー・フェドセーエフの意見には強く反対です...。

を課さない。

 
純粋に、目の前の課題に取り組む。値を削除して空にする
template<typename T>
int arrayFilter(T &data[], const T value)
{
     int s, d = s = ArraySize(data);
     
     for(int i=d-1; i>=0; i--)
          if(data[i] == value || data[i] == NULL)
          {
               s--;
               for(int j=i; j<s; j++)
                    data[j]=data[j+1];
          }
  
     if(d > s)
          ArrayResize(data, s);
     
     return s;
}

void OnStart()
{
     long array[] = {1, 2, 3, 6, 9, 5, 6, 3, 25, ,, 6, 8, NULL, 7, NULL, 4};
     Print( arrayFilter<long>(array, 3) );
}