配列(1次元2次元)から要素を削除するにはどうすればよいですか? - ページ 9

 
もちろん、コストや経費を無視して、任意の次元の配列を#defineで新たに作成した1次元配列に書き換えてから関数を 呼び出す(そして書き戻す)ことも可能ですが、コストは可哀想なことになりますね。
 
Alexey Viktorov:

なぜ助からないのか?

...

なぜなら、配列の次元数も、どの次元のサイズも、オーバーロードの引き金にはならないからです。また、自動的に定義できるパラメータを関数に渡すことは、あまり賢明な判断ではありません。

 
Dmitry Fedoseev:

なぜなら、配列の次元数も、どの次元のサイズも、オーバーロードの引き金にはならないからです。また、自動的に定義できるパラメータを関数に渡すことは、必ずしも賢明な判断とは言えません。

そう、もう無駄なことだと気づいてしまったのです。

 
全体として、価値のあるテーマですが、私にとっては非常に幅広く、複雑で、長年の経験が必要なものです。
 
Seric29:
全体として、価値のあるテーマですが、私にとっては非常に幅広く、複雑で、長年の経験が必要なものです。

あまり細かいことは言わないでください、彼らはすべてを普遍化したがりますが、なくても十分生きていけますよ。

 
実は、このスレッドへの最初の返信で、普遍的なレシピが示されていたのです。自分で電源を入れてテストすればいいだけの話ですが、全部噛んで口に入れることはできませんよね?
 
Ilya Malev:
実は、このスレッドの最初の返信で、普遍的なレシピが示されています。自分で電源を入れてテストすればいいだけですが、全部噛んで口に入れるのは無理ですよね?

イリヤさん、この話題は本当に深刻に受け止めているのでしょうか?ちょっとした遊び心で...。次元に関係なく、すべてを1次元配列に往復させるという作業的な答えが返ってきましたね。私の答えは、皆さんと同じで、本質を変えない小さな技術的な部分があるだけです。定義と嘆かわしいコストについて理解していなかった。

 
Алексей Тарабанов:

イリヤさん、この話題は本当に深刻に受け止めているのでしょうか?ちょっとした遊び心で...。次元に関係なく、すべてを1次元配列に往復させるという作業的な答えが返ってきましたね。私の答えは、皆さんと同じで、本質を変えない小さな技術的な部分があるだけです。コストと嘆く意味がわからない。

いいえ、逆に深刻ではありません、私はちょうどTCが解決策を探すためにどこに再び説明した(最初のポストは、私がチェックしなかったが、動作するように最も可能性が高いです)。そして、いろいろなおしゃべりが始まりました :)

実際μlではこれらのアレイは悲しい状況ですが、もう一つ、99%のケースで必要ないということです。頭を使えば、どんなコーダーでも構造体や、オブジェクトを使う。

私が書いたdefineは、私が設定した問題を解決するものです))- ArrayDelを1回呼び出すと、Dmitryが書いたコードが異なる配列に対して実行されます。確かに、これは機能ではなく、「死者の湿布」と言われるようなものです。defineのコストについてですが、どうしてもint型のar[]パラメータを任意の配列に対して実行したい場合は、以下のようにします(これは単純化したもので、実際には測定回数もそこに渡す必要があります)。


#property strict

#define  PackAndDel(A,S,C) { int tmp[]; ArrayCopy(tmp,A); ArrayDelete(tmp,S,C); ArrayCopy(A,tmp); }

void ArrayDelete(int &ar[], int start, int count)
 {

  // ..... ;

 }



void OnStart ()

{

  int ar1[];

  int ar2[][5];

  int ar3[][6][2];

  PackAndDel( ar1, 0, 1 );

  PackAndDel( ar2, 4, 1 );

  PackAndDel( ar3, 1, 3 );

}