通用类库 - 错误、说明、问题、使用功能和建议 - 页 24 1...171819202122232425262728293031...38 新评论 Vasiliy Sokolov 2018.11.22 11:11 #231 fxsaber:关于从一个键获取一个值的问题。在库的代码中,这个方法看起来是这样的 //+------------------------------------------------------------------+ //| Find index of entry with specified key. | //+------------------------------------------------------------------+ template<typename TKey,typename TValue> int CHashMap::FindEntry(TKey key) { if(m_capacity!=NULL) { //--- get hash code from key int hash_code=m_comparer.HashCode(key)&0x7FFFFFFF; //--- search pair with specified key for(int i=m_buckets[hash_code%m_capacity]; i>=0; i=m_entries[i].next) if(m_entries[i].hash_code==hash_code && m_comparer.Equals(m_entries[i].key,key)) return(i); } return(-1); }是的,这段代码可能有误导性,因为i在for中的非标准的重新分配。 首先,我们通过索引访问子数组,它可能包含我们的值:i=m_buckets[hash_code%m_capacity]; (即子数组或值仓的i索引)。 然后,在同一个for中,bin索引被转变成bin项目索引:i=m_entries[i].next 事实上,这段代码写得很正确,因为在一个典型的案例中,每个子数组平均 有一个项目,循环平均只执行一次。 fxsaber 2018.11.22 11:20 #232 Vasiliy Sokolov:是的,这段代码可能有误导性,因为i在for中的非标准的重新分配。 首先,我们通过索引访问一个子数组,其中可能包含我们的值:i=m_buckets[hash_code%m_capacity]; (即子数组或篮子值的i索引)。 然后,在同一个for中,bin索引被转变成bin项目索引:i=m_entries[i].next 事实上,这段代码写得很正确,因为在一个典型的案例中,每个子数组平均 包含一个项目,循环平均只执行一次。我明白,这个循环是为了碰撞而做的:要通过小名单。 Vasiliy Sokolov 2018.11.22 11:22 #233 fxsaber:我认为这个循环是为碰撞而做的:要通过一个小型的清单。是的,完全正确。 pavlick_ 2019.01.25 07:13 #234 使用模板库(CArrayList)来存储自定义类型。印象不是很好。为了方便起见,我写了一些宏程序 #define CLEANUP do { \ for(int i_cln = 0; i_cln < segs.Count(); ++ i_cln) { \ Wave_end *cln_el; \ if( segs.TryGetValue(i_cln, cln_el) ) \ delete cln_el; \ }}while(false) #define SSEG(IND) do { \ if( ! segs.TryGetValue(IND, we) ) { \ CLEANUP; \ continue; \ }}while(false) TryGetValue中过多的防骗措施+不可能按值传递类,使得使用起来很痛苦。 Vladimir Karputov 2019.03.10 11:39 #235 与本主题无关的评论已被移至"来自MQL5 MT5 MetaTrader 5初学者的问题"。 Andrey Pogoreltsev 2019.04.03 07:46 #236 告诉我,也许我不明白什么,但如果我试图使用这种类型的结构。 #include <Generic\\ArrayList.mqh> struct Option { string name; color clr; }; ... CArrayList<Option> _options; 我得到一个错误。 'Option' - 对象只通过引用传递 ICollection.mqh 14 18 然后有一大堆的错误... Sergey Eremin 2019.04.03 08:25 #237 Andrey Pogoreltsev:告诉我,也许我不明白什么,但如果我试图使用这种类型的结构。 我得到一个错误。 'Option' - 对象只通过引用传递 ICollection.mqh 14 18 而接下来有一整堆的错误...像这样试试吧。 #include <Generic\\ArrayList.mqh> class Option { string name; color clr; }; ... CArrayList<Option*> _options; Andrey Pogoreltsev 2019.04.03 08:50 #238 Sergey Eremin:这样试试吧。 传递/存储指向一个集合的指针在概念上是错误的。 TheXpert 2019.04.03 08:53 #239 Andrey Pogoreltsev:传递/存储指向一个集合的指针在概念上是错误的。没有任何一个MQL的通用程序是稍微合适的。所有这些程序都有严重的错误。 Andrey Pogoreltsev 2019.04.03 08:55 #240 TheXpert:没有任何一个MQL的通用程序是稍微合适的。所有这些程序都有严重的错误。嗯,是的,我已经使用了一个数组。如果它们只适用于内置类型,为什么要创建集合并将其放入kodobase?) 1...171819202122232425262728293031...38 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
关于从一个键获取一个值的问题。在库的代码中,这个方法看起来是这样的
是的,这段代码可能有误导性,因为i在for中的非标准的重新分配。
首先,我们通过索引访问子数组,它可能包含我们的值:i=m_buckets[hash_code%m_capacity]; (即子数组或值仓的i索引)。
然后,在同一个for中,bin索引被转变成bin项目索引:i=m_entries[i].next
事实上,这段代码写得很正确,因为在一个典型的案例中,每个子数组平均 有一个项目,循环平均只执行一次。
是的,这段代码可能有误导性,因为i在for中的非标准的重新分配。
首先,我们通过索引访问一个子数组,其中可能包含我们的值:i=m_buckets[hash_code%m_capacity]; (即子数组或篮子值的i索引)。
然后,在同一个for中,bin索引被转变成bin项目索引:i=m_entries[i].next
事实上,这段代码写得很正确,因为在一个典型的案例中,每个子数组平均 包含一个项目,循环平均只执行一次。
我明白,这个循环是为了碰撞而做的:要通过小名单。
我认为这个循环是为碰撞而做的:要通过一个小型的清单。
是的,完全正确。
使用模板库(CArrayList)来存储自定义类型。印象不是很好。为了方便起见,我写了一些宏程序
TryGetValue中过多的防骗措施+不可能按值传递类,使得使用起来很痛苦。
告诉我,也许我不明白什么,但如果我试图使用这种类型的结构。
我得到一个错误。
'Option' - 对象只通过引用传递 ICollection.mqh 14 18
然后有一大堆的错误...告诉我,也许我不明白什么,但如果我试图使用这种类型的结构。
我得到一个错误。
'Option' - 对象只通过引用传递 ICollection.mqh 14 18
而接下来有一整堆的错误...像这样试试吧。
这样试试吧。
传递/存储指向一个集合的指针在概念上是错误的。
传递/存储指向一个集合的指针在概念上是错误的。
没有任何一个MQL的通用程序是稍微合适的。所有这些程序都有严重的错误。
没有任何一个MQL的通用程序是稍微合适的。所有这些程序都有严重的错误。
嗯,是的,我已经使用了一个数组。如果它们只适用于内置类型,为什么要创建集合并将其放入kodobase?)