Ошибки, баги, вопросы - страница 2467

 
Igor Makanu:

в очередной стопервый раз пытался сделать обертку класс для двухмерного массива, сколько не бился так и не получилось перегрузить [] , чтобы обращаться как к нормальному двухмерному массиву arr[1][2]  

Такую задачу решали 4-5 год назад, была отдельная ветка с готовыми решениями.
Из активных участников до сегодня мало кто дожил, в основном перебанили...

П.с там был не двухмерный, а трех и более мерный массив на классах.

 
О, кажись, нашел ту ветку https://www.mql5.com/ru/forum/6729
В MQL5 всегда есть место подвигу ! ;)
В MQL5 всегда есть место подвигу ! ;)
  • 2012.05.16
  • www.mql5.com
Общее обсуждение: В MQL5 всегда есть место подвигу ! ;)
 
Sergey Dzyublik:

Такую задачу решали 4-5 год назад, была отдельная ветка с готовыми решениями.
Из активных участников до сегодня мало кто дожил, в основном перебанили...

П.с там был не двухмерный, а трех и более мерный массив на классах.

Ну ведь пошёл, поглядел эту ветку - нет ни одного ни забаненного, ни удалённого аккаунта. Все люди  из той ветки есть, и здравствуют.

Это вы скандальчик так закатить решили, набросив на администрацию? Ну глупо же. Прекращайте видеть зло вокруг.

 
Sergey Dzyublik:
О, кажись, нашел ту ветку https://www.mql5.com/ru/forum/6729

кажется я читал в прошлом месяце этот топик, вечером еще раз гляну

но мои эксперименты с перегрузкой [][]  закончились пониманием, что можно что то одно реализовать в  MQL  или L-value или R-value с помощью перегрузки [][] 

если у Вас есть готовое решение для работы с динамическим двухмерным массивом - выложите в CodeBase , это полезная вещь - я искал не нашел ничего лучше 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 ?
К сожалению, данную проблему при использовании templates в контейнерах с произвольным типом данных ни как не обойти.

В частном же случаи, для решения проблемы можно реализовать наследование, определить для наследника конструктор копирования для базового класса и заменить в проблемной функции возвращаемый тип с базового на наследника.

 
Разработчикам:
Прошу добавить функцию возвращающую для массива его Capacity (количество элементов для которых зарезервировано место в памяти). Не путать с параметром reserve для ArrayResize.
Для string есть StringBufferLen, а для массива ни чего нет.
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Sergey Dzyublik, 2019.05.22 16:01

Спасибо еще раз TheXpert за предоставленный код.
Имеем следующие результаты по ArrayResize capacity МТ5(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 yyy=0.0"


 
Michael2K:

Добрый вечер!

Кто-нибудь может подсказать, что происходит?

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


Используйте точку, что бы указать тип double:

double yyy=28./50*100;
 
Sergey Dzyublik:
Прошу так же предоставить псевдокод о использовании параметра reserve_size в ArrayResize.
Ни где не описано поведение системы при указании нового значения reserve_size при очередном ArrayResize.
Sergey Dzyublik:


Верно ли следующее предположение при последовательном вызове:

Псевдокод они когда-то давали в этой ветке, поищите.  Насколько помню, capacity там увеличивается только при выходе размера массива за пределы этого capacity.  Хотя конечно что-то могло и поменяться.

А функция по получению значения сapacity действительно очень нужна.