Какими способами можно изменить размер массива нужного измерения?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Seric29
777
Seric29  

Например С++ поддерживает записи такого формата 

int r=10,r1=2;

int mas[r][r1]; или так

const int r=10;int mas[r];

Можно циклами крутить массивы как угодно, но MQL4 это нечто ,тут что-то сделать почти не возможно, есть только функция которая меняет размер в первом измерении, получается работа со строгими статическими значениями. Может подскажете, я валенок в этом ещё не понимаю, может что-то можно сделать?

SeriousRacoon
1123
SeriousRacoon  
https://www.mql5.com/ru/forum/310080
Dmitry Fedoseev
57685
Dmitry Fedoseev  

oO а где это с++ поддерживает такую работу с массивами?  В mql работа с массивами на много проще. Есть функция ArrayResize(). Да, она только по первому измерению, работает, а Деда Мороза не существует. 

Если надо второе измерение менять, то поможет массив структур:

SS{
   double b[];
}

SS a[];
Seric29
777
Seric29  
Dmitry Fedoseev:

oO а где это с++ поддерживает такую работу с массивами?  В mql работа с массивами на много проще. Есть функция ArrayResize(). Да, она только по первому измерению, работает, а Деда Мороза не существует. 

Если надо второе измерение менять, то поможет массив структур:

Другими словами это невозможно. В с++ я писал как выше в начале теме, не ругалось оно, направо налево его можно крутить, только напишу без вранья первое измерение я лично эксперементировал никаких функций наподобие ArrayResize я не применял и не знаю есть ли такие в с++, а что касается второго измерения то видел на форумах коды тоже ребята крутили обычными циклами, сам многомерные не тестил в С++, здесь же даже для первого измерения нужна функция ArrayResize. Так в чём смысл этих структур можете подробнее написать, копировать значение из массива в структуру а потом обратно? По правде сказать я хочу использовать 3ёхмерный массив но как я вижу тут и с двухмерными проблема.

Seric29
777
Seric29  
Я тему изучал как передавать структуры в функции мне не понравилось что нельзя передавать любую структуру а строго одну и я бросил эту затею.
Сергей Таболин
2843
Сергей Таболин  
Почему работа с массивами такая "кривая" - фиг его знает. Но эта беда длиться уже от сотворения мира, а разработчики упорно эту проблему игнорируют. Так что бубен в руки и танцуем ))))
Seric29
777
Seric29  
Сергей Таболин:
Почему работа с массивами такая "кривая" - фиг его знает. Но эта беда длиться уже от сотворения мира, а разработчики упорно эту проблему игнорируют. Так что бубен в руки и танцуем ))))

Хоть один человек меня поддержал. Работа с самыми важными элементами программы, которые хранят очень критические данные для построения роботов и сложных схем кривая до невозможности и такое впечатление что это никогда не прекратиться, сделать что-то сложное и достойное внимания очень сложно, всё это приходится крутить и обходить всеми возможными извращёнными и изредка нормальными методами.

Dmitry Fedoseev
57685
Dmitry Fedoseev  
Seric29:

Другими словами это невозможно. В с++ я писал как выше в начале теме, не ругалось оно, направо налево его можно крутить, только напишу без вранья первое измерение я лично эксперементировал никаких функций наподобие ArrayResize я не применял и не знаю есть ли такие в с++, а что касается второго измерения то видел на форумах коды тоже ребята крутили обычными циклами, сам многомерные не тестил в С++, здесь же даже для первого измерения нужна функция ArrayResize. Так в чём смысл этих структур можете подробнее написать, копировать значение из массива в структуру а потом обратно? По правде сказать я хочу использовать 3ёхмерный массив но как я вижу тут и с двухмерными проблема.

У меня ругается, потому что, на самом деле, это невозможно. А если и возможно, то не имеет смысла. Потому что размер может быть указан только при объявлении, потом уже невозможно изменить размер массива.

Проходить в цикле по массиву - пожалуйста, никаких проблем. 

Смысл структур - ничего копировать не надо, сразу пользоваться массивами из структур.

Трехмерный массив не проблема:

struct S1{
   double a[];
}

struct S2{
   S1 b[];
}

S2 c[];

---

Есть еще вариант: класс CArray(). Но так сложилось, что не пользуюсь им, поэтому не имею практического опыта, поэтому объяснить, как им правильно пользоваться, не смогу.

---

Seric29
777
Seric29  
Dmitry Fedoseev:

oO а где это с++ поддерживает такую работу с массивами?  В mql работа с массивами на много проще. Есть функция ArrayResize(). Да, она только по первому измерению, работает, а Деда Мороза не существует. 

Если надо второе измерение менять, то поможет массив структур:

с++ поддерживает записи такого типа 

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])//аргументы в скобках не обязательны можно просто писать int main()
{
        const int yt=8,tu=3;
        int mas[yt][tu]={};
        return 0;
}

mql4 такие записи не поддерживает, но да, для того чтобы изменить размеры нужно заставить программу поверить что они типа const. Манипуляции с const я видел и в mql, наверное в с++ более развита оболочка но математических функций в нём меньше.

Dmitry Fedoseev
57685
Dmitry Fedoseev  
Seric29:

с++ поддерживает записи такого типа 

mql4 такие записи не поддерживает, но да, для того чтобы изменить размеры нужно заставить программу поверить что они типа const. Манипуляции с const я видел и в mql, наверное в с++ более развита оболочка но математических функций в нём меньше.

Не поддерживаются. А зачем они нужны? Какая от них польза? Никакой.  

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий