文章 "MQL5秘笈之:采用关联数组或字典实现快速数据访问" - 页 2

 
非常好、非常有趣的文章。谢谢。
 
好文章,帮助新手迈出第一步
 

我很抱歉!

我刚开始学习列表和对象创建

当我开始测试和研究你的代码时,我发现了一个小错误,但我可能是错的。

在比较你的程序库和标准程序库谁更快时,你在描述中说了一件事,但在图表上却显示了另一件事。是你没注意到,还是我看错了?

P.P. 4.3.

 
BmC:

我很抱歉!

我刚开始学习列表和对象创建

当我开始测试和研究你的代码时,我发现了一个小错误,但我可能是错的。

在比较你的程序库和标准程序库谁更快时,你在描述中说了一件事,但在图表上却显示了另一件事。是你没注意到,还是我看错了?

P.P. 4.3.

一开始我写的确实是个错误,但后来我仔细看了一下图表:不,一切都正确。y 轴表示的是时间,时间越长,项目添加的速度越慢。图表显示,向 CArrayObj 添加一百万个项目需要 5 秒钟,而向 CDictionary 添加相同数量的项目只需要 1 秒钟。也就是说,特别是在大量元素顺序添加的任务中,CDictionary 的内存重新分配模型要优于 CArrayObj 中的标准重新分配模型。

 
Vasiliy Sokolov:

一开始我写道,这确实是个错误,但后来我仔细看了一下图表:不,一切都正确。Y 轴显示的是时间,时间越长,添加项目的速度越慢。图表显示,向 CArrayObj 添加一百万个条目需要 5 秒钟,而向 CDictionary 添加相同数量的条目只需要 1 秒钟。也就是说,与 CArrayObj 中的标准重新分配模型相比,CDictionary 的内存重新分配模型在需要大量连续添加项目的任务中胜出。

不,这仍然是个错误。但这对我来说并不重要,但对其他读者来说,是的,他们也会像我一样从一开始就明白这一点。这应该写得非常精确,因为它导致了一个遥远的误解。))))

引用:它使用 TEST_ARRAY 宏如果定义了该宏,测试将对 CArrayObj 执行操作,如果没有定义,则对 CDictionary 执行操作。在这种特殊情况下 ,第一个添加新元素的测试胜过 CDictionary,它的内存重新分配模型更好:

必须有:它使用 TEST_ARRAY 宏。如果定义为 "NOT",测试将对 CArrayObj 执行操作,如果定义为 "YES",则对 CDictionary 执行操作。在这种特殊情况下,第一个添加新元素的测试比 CDictionary 更胜一筹:

整个错误直接出现在代码中,从一开始就通过 CDictionary 去填充列表,然后如果没有定义 宏 TEST_ARRAY 就转到 CArrayObj 这里是错误发生的地方。这是由于在一个材料上工作的疲劳。

但这是一个伟大而耗时的材料。它对我理解指针和对象创建。我很难融入其中。你需要在短时间内掌握它......。

 

BmC:

我在指针和对象创建方面得到了很多帮助。指针和对象创建

在 MQL4 和 MQL5 中,没有指针,只有描述符,这是一个完全不同的组合。
 
Alexey Volchanskiy:
В MQL4 и MQL5 нет указателей, есть дескрипторы, это совсем другой компот.
Alexey Volchanskiy
:

在 MQL4 和 MQL5 中,没有指针,只有描述符,这是完全不同的组合。

你是想耍小聪明,还是只想获得评分。如果您没有时间阅读这篇文章和我所写的内容,我请您不要再这样做了,而是给 MetaQuotes 软件公司的创建者写信,告诉他们有什么或应该有什么,但不要在这里对聪明人这样做。对于那些像您一样希望在未来得到它的人:www.mql5.com/ru/docs/basis/types/object_pointers. 

你一定只对这种愚蠢的言论有评价。如果你无事可做,就再读一读 MQL 参考资料。如果你非常需要对愚蠢言论的评分,那就写信给你那些愚蠢想法的创造者吧,他们会在那里为你赚钱的。

如果您不明白我想说什么,那么举个例子,我告诉您,您仍然可以把愚蠢的想法写给创造者:" class="linkator">"对象描述符"一章。

然后你给出的理由是:"既然我如此愚蠢,而且我希望我所有的蠢话都能成为真实合理的陈述,那就请'创造者'救救我吧。

如果我是 "创造者",我会建议你去买一朵 "七色花"。但这对你来说并不重要,你已经写了三个语句。3093+3=3096.我已经帮了你,现在帮我不要再在这里写了。

我在论坛上已经呆了很长时间,你的发言我看是一如既往的愚蠢和一成不变。你总是用片段的形式来讨论问题,总是纠正每个人的错误,在这里却发表如此愚蠢的言论。我不知道你为什么这么生气,因为我也是同样的用户,我也是为了补充知识而爬上论坛的初学者,而当这样一个拥有 3000 分的 "大师 "写东西给他听时,他也会听。而他不过是一个为自己设定目标、获得评分的傻瓜。他甚至没有想到,他的发言将读者引向了另一个方向。

我再次向您道歉。如果你再在我的回复中出现,我将坚持屏蔽你,你也将失去你那愚蠢的评分。尤其是向版主证明你的愚蠢是毫无价值的,你的回答总是离题万里,愚蠢至极。

 

现在已经是九月份了,标准库中 还没有这个类:)

顺便提一个关于该类代码本身的问题。在代码末尾定义它有什么意义?

#define  FOREACH_DICT(dict) for(CObject* node = (dict).GetFirstNode(); node != NULL; node = (dict).GetNextNode())
因为在示例中根本没有用到它...
 
Konstantin Karpov:

现在已经是九月份了,标准库中 还没有这个类:)

顺便提一个关于该类代码本身的问题。在代码末尾定义它有什么意义?

因为在示例中根本没有用到它...
用到了。在第 5.3 段:"枚举字典中元素的方法"。字典枚举类似于列表枚举,因此枚举操作不太标准,for 的内容也不同于经典数组枚举的内容。为了让我们自己和用户的生活更轻松,不再 痛苦地 记住 节点的 枚举 ,我们引入了这个宏。
 
拜EA老师