記事"MQL5 クックブック: 連想配列またはクイック データアクセスのための辞書の実装"についてのディスカッション - ページ 2

 
とても良い、興味深い記事だ。ありがとう。
削除済み  
初心者のステップに役立つ記事
 

申し訳ない!

私はリストとオブジェクトの作成について 勉強しているところです。

あなたのコードをテストし、掘り下げ始めたとき、私は些細な間違いを見つけました。

あなたのライブラリと標準のライブラリを比較して、どちらが速いかを測定する際、あなたは説明の中で1つのことを言っていますが、グラフでは別のことを示しています。気づかなかったのか、それとも私がグラフを読み間違えているのか?

P.P. 4.3.

 
BmC:

申し訳ない!

私はリストとオブジェクトの作成について 勉強しているところです。

あなたのコードをテストし、掘り下げ始めたとき、私は些細な間違いを見つけました。

あなたのライブラリと標準のライブラリを比較して、どちらが速いかを測定する際、あなたは説明の中で1つのことを言っていますが、グラフでは別のことを示しています。気づかなかったのか、それとも私がグラフを読み間違えているのか?

P.P. 4.3.

最初は確かに間違いだと書いたが、その後グラフをよく見てみると、いや、すべて正しい。Y軸は時間を表し、長ければ長いほど、つまりアイテムの追加がうまくいくのが遅くなる。このグラフは、CArrayObjに100万個のアイテムを追加するのに5秒かかり、CDictionaryに同じ数のアイテムを追加するのに1秒かかることを示している。つまり、特に要素の大きなシーケンシャルな追加を伴うタスクでは、CArrayObjの標準的な再割り当てモデルと比較して、CDictionaryのメモリ再割り当てモデルが勝っている。

 
Vasiliy Sokolov:

しかし、グラフをよく見てみると、いや、すべて正しい。Y軸は時間を示しており、長ければ長いほどアイテムの追加にかかる時間は遅くなる。このグラフを見ると、CArrayObjに100万個のアイテムを追加するのに5秒かかり、CDictionaryに同じ数のアイテムを追加するのに1秒かかることがわかる。つまり、特にアイテムを大量に逐次追加するタスクでは、CArrayObjの標準的な再割り当てモデルと比較して、CDictionaryのメモリ再割り当てモデルが勝っていることを示している。

いや、それでも間違いなのだが、私にとってはどうでもいいことなのだが、他の読者にとってはそうなのだ。遠くの誤解を招くので、正確に書くべきです。))))

quote:TEST_ARRAYマクロを使いますもしそれが定義されていれば、テストはCArrayObjに対して、そうでなければCDictionaryに対して操作を実行します。新しい要素を追加するための最初のテストは、CDictionary.Memory再割り当てモデルよりも、この特定のケースでは優れていたよりも勝って います:

必須:TEST_ARRAYマクロを使用する。それが "NOT "に定義されている場合、テストはCArrayObjに対する操作を実行し、"YES "の場合はCDictionaryに対する操作を実行する。新しい要素を追加する最初のテストは、CDictionaryよりも勝っている。そのメモリ再割り当てモデルは、この特定のケースではより優れていた:

全体のエラーは、最初からコードに直接CDictionaryを介してリストを埋めるために行くし、 マクロTEST_ARRAYが CArrayObjを 行く 定義されていない場合、 ここでエラーが発生した場所 です。それは1つの材料に取り組んで疲れからだ。

しかし、素晴らしく、時間のかかるものでした。ポインタとオブジェクトの生成について理解するのにとても役に立った。ポインタとオブジェクトの生成について 理解するのにとても役に立った。ポインタやオブジェクトの作成について理解するのにとても役立ちました。短期間で必要なものなのに......。

 

BmC:

ポインタとオブジェクトの作成においてポインタとオブジェクトの作成について

MQL4とMQL5では、ポインターは存在せず、ディスクリプタが存在する。
 
Alexey Volchanskiy:
В MQL4 и MQL5 нет указателей, есть дескрипторы, это совсем другой компот.
Alexey Volchanskiy
:

MQL4とMQL5にはポインターがなく、ディスクリプタがある。

賢くなりたいのか、それとも評価を得たいだけなのか。もし、この記事や私が書いたことを読む時間がないのであれば、もうそのようなことはしないで、MetaQuotes Software Corp.のクリエーターに、彼らが持っているもの、あるいはあるべき姿を書いてください。あなたのように将来それを望む人のためにwww.mql5.com/ru/docs/basis/types/object_pointers. 

あなたはそのような愚かな文でのみ評価を持っている必要があります。やることがないなら、もう一度MQLのリファレンスを読んでください。そんなにくだらない文章に対する評価が必要なら、あなたのくだらないアイデアの創造者に手紙を書けばいい。

私が何を言いたかったのか理解できなかったのなら、例えば、あなたはまだクリエイターにバカなアイデアを書くことができることをお知らせします:「MetaQuotesの開発者の皆さん、" class="linkator">"オブジェクト記述子"の章に改名してください。

私が "クリエイター "だったら、私は "クリエイター "である。

もし私が "創造主 "なら、"七輪の花 "の花を手に入れることを勧めるだろう。しかし、あなたには関係ない。あなたはすでに3つの文を書いているのだから。3093+3=3096.私はもうここに書かないように、今あなたを助けた。

私は長い間このフォーラムを利用してきたが、あなたの発言はいつものように愚かで、絶え間ないものだ。トピックに関するあなたは、常に断片的に書き、常に皆を修正し、ここではそのような愚かな文。私はあなたがとても怒っている理由です、私はまた、知識を補充するためにフォーラムを登る同じユーザー初心者であり、そのような3000の評価を持つ "教祖 "は、何かが彼に耳を傾けるために書くとき。そして、彼は自分の評価を上げることを目標にしたただの愚か者だ。彼は、自分の発言が枝の読者を別の方向に誘導していることさえ考えていない。

もう一度謝罪する。もしまた私の返信に引っかかるようなら、私はあなたをブロックすることを主張し、あなたは愚かにも獲得した評価を失うでしょう。特に司会者にあなたの愚かさを証明することは無価値です、あなたの回答はいつもトピックが短く、愚かです。

削除済み  

もう9月だし、このクラスは標準ライブラリには ないんだけどね :)

ところで、このクラスのコード自体について質問がある。このクラスをコードの最後に定義した意味は何だったのでしょうか?

#define  FOREACH_DICT(dict) for(CObject* node = (dict).GetFirstNode(); node != NULL; node = (dict).GetNextNode())
というのも、サンプルのどこにも使われていないからだ。
 
Konstantin Karpov:

もう9月だし、このクラスは標準ライブラリには ないんだけどね :)

ところで、このクラスのコード自体について質問がある。このクラスをコードの最後に定義した意味は何だったのでしょうか?

というのも、サンプルのどこにも使われていないからだ。
使われています。段落5.3の辞書の要素を列挙するメソッド」 です。辞書の列挙はむしろリストの列挙に似ているので、列挙操作は標準的ではなく、forの内容は古典的な配列の列挙の内容とは異なります。 そのため、ノードの 列挙を 覚えるのに苦労しないように 、このマクロが導入されました。
 
EA氏への呼びかけ