错误、漏洞、问题 - 页 2467

 
Igor Makanu:

我第一次尝试为一个二维数组做一个封装类,但我无法重载[]来把它当作一个普通的二维数组arr[1][2]。

这样的问题在4-5年前就已经解决了,当时有一个独立的分支,有现成的解决方案。
很少有活跃的参与者 能活到今天,他们中的大多数都被淘汰了......。

P.s. 这不是一个二维阵列,而是一个关于类的三维阵列。

 
哦,我想我找到了那条线https://www.mql5.com/ru/forum/6729
В MQL5 всегда есть место подвигу ! ;)
В MQL5 всегда есть место подвигу ! ;)
  • 2012.05.16
  • www.mql5.com
Общее обсуждение: В MQL5 всегда есть место подвигу ! ;)
 
Sergey Dzyublik:

这样的问题在4-5年前就已经解决了,当时有一个独立的分支,有现成的解决方案。
活跃的参与者 中,很少有人能活到今天,大多数人都被重新封杀......

P.s. 这不是一个二维阵列,而是一个关于类的三维阵列。

好吧,我去看了那条线--没有一个账户被禁止或删除。该支部的所有人员都在那里,而且仍然活着。

你就是这样决定制造一个丑闻,把它扔给政府?这很傻,不是吗?不要再在这里看到邪恶。

 
Sergey Dzyublik:
哦,我想我找到了那个分支https://www.mql5.com/ru/forum/6729

我想我上个月读过这个主题,我今晚再看看

但我对重载[][]的实验最后发现,我可以用重载[][]在MQL中实现L-value或R-value。

如果你有一个完整的动态二维数组的解决方案--把它放在CodeBase中,这是一个有用的东西--我找了找,没有比MT的CMatrixDouble更好的了:#include Math Alglib

 
class A{
public:
   uchar data1;
};

A func(){
   A a;
   a.data1 = 1;
   return a;      //object of 'A' cannot be returned, copy constructor 'A::A(const A &)' not found
}


void OnStart(){  
   A a;

   //1
   A aa = a;
   a = aa;
   
   //2
   a = func();   
}

/1和/2之间的区别是什么?
不幸的是,当在具有任意数据类型 的容器中使用模板时,这个问题无法避免。

作为一种特殊情况,为了解决这个问题,我们可以实现继承,为父类定义一个拷贝构造函数,并将问题函数中的返回类型从基类替换为父类。

 
开发人员。
请添加一个函数,返回一个数组的容量(内存中保留的元素数量)。不要与ArrayResize 的保留参数相混淆。
字符串有StringBufferLen,而数组则没有。
 

关于交易、自动交易系统和交易策略测试的论坛

虫子,虫子,问题

Sergey Dzyublik, 2019.05.22 16:01

再次感谢TheXpert 提供的代码。
我们在ArrayResize capacity MT5(build 2057)上有如下结果。


结果。
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TEST_ArrayCapacity:TEST_ArrayCapacity
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,0):100
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):100
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,101,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,200,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,201,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,202,100):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,1):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,400):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,300,400):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,301,600):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,302,600):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,303,600):903
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,0):903
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):903
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,-1):100
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):100
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,105,100):205

 

晚上好!

谁能告诉我发生了什么事?

这是我第一次看到这种情况发生。其中一个函数中的简单代码。

double yyy=28/50*100;
   
Print("test yyy=", yyy);

结果。

"2019.05.21 19:38:29.364 2019.04.01 00:05:00 test yyyy=0.0"


 
Michael2K:

晚上好!

谁能告诉我发生了什么事?

int(28) / int(50) * int(100) == int(0) * int(100) == int(0) == double(0.0)


使用句号来指定双倍类型

double yyy=28./50*100;
 
Sergey Dzyublik:
也请提供在ArrayResize中使用reserve_size参数的伪代码。
没有描述当为下一个ArrayResize设置一个新的reserve_size值时,系统会如何表现。
Sergey Dzyublik:


顺序调用时,以下假设是否正确。

他们曾经在这个主题中给出的伪代码,查一查。 在我的印象中,只有当数组大小 超过这个容量时,那里的容量才会增加。 当然,有些东西可能已经改变。

而得到一个saracity的值的功能真的非常有用。