Организация стека в MQL4, как? - страница 2

 
xeon:

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

    ArrayStr[0][0]  = "a";
    ArrayStr[1][0]  = "b";
    ArrayStr[2][0]  = "c";
    ArrayStr[3][0]  = "d";
    ArrayStr[4][0]  = "e";
    ArrayStr[4][1]  = "e1"; 
    ArrayStr[4][2]  = "e2";
    ArrayStr[5][0]  = "f";
    ArrayStr[6][0]  = "g";  
    ArrayStr[7][0]  = "h";

Ну да, а чтоб вставить между е1 и е2 надо заряжать третье измерение, потом четвертое, и т.д. Ну а потом кончится память. :)

Я ж говорил, универсального решения нет. А под конкретную задачу и реализация соответствующая.
 
Irtron, в последнем сообщении на предыдущей страничке я предложил общее решение для списка. Только, наверно, лучше сделать не двумерный массив, а два одномерных, связанных друг с другом (двумерный не получится, если сами данные не int). В одном будут сами элементы, во втором - их индексы. Конечно, все элементы в списке будут одного типа. Вот теперь еще и деревья бы научиться делать...

P.S. Вообще это все, конечно, извращение, если учесть, что обещают в MQL5, - классы, пользовательские типы данных и т.п. Но не уверен, что весь народ тут же перейдет на пятый, как только он появится.
 
Irtron:
xeon:

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

    ArrayStr[0][0]  = "a";
    ArrayStr[1][0]  = "b";
    ArrayStr[2][0]  = "c";
    ArrayStr[3][0]  = "d";
    ArrayStr[4][0]  = "e";
    ArrayStr[4][1]  = "e1"; 
    ArrayStr[4][2]  = "e2";
    ArrayStr[5][0]  = "f";
    ArrayStr[6][0]  = "g";  
    ArrayStr[7][0]  = "h";

Ну да, а чтоб вставить между е1 и е2 надо заряжать третье измерение, потом четвертое, и т.д. Ну а потом кончится память. :)

Я ж говорил, универсального решения нет. А под конкретную задачу и реализация соответствующая.


А никто и не предлагал использование измерений в качестве универсального решения, это был ответ на частную задачу.

что же касается списка, то я согласен с высказыванием - " под конкретную задачу и реализация соответствующая."

 
Mathemat:
Irtron, в последнем сообщении на предыдущей страничке я предложил общее решение для списка. Только, наверно, лучше сделать не двумерный массив, а два одномерных, связанных друг с другом (двумерный не получится, если сами данные не int). В одном будут сами элементы, во втором - их индексы. Конечно, все элементы в списке будут одного типа.

Как раз такую организацию списка я и имел в виду в первом варианте:

Irtron:

Со списками универсального решения нет.
Если, скажем, доступ к элементам списка происходит в основном последовательно (т.е. при помощи итератора next()), то можно поизвращаться с дополнительным списком индексов основного списка.
В случае произвольного доступа по индексу проще делать в лоб, сдвигая верх массива в ту или иную сторону. Можно, конечно, и это соптимизировать раз эдак в... Да, вообще, во сколько надо, во столько и можно.
Проблема с промежуточным индексированием вылезет, когда нужно будет рандомно выдергивать элементы из очень длинного и перемешанного списка. Придется бежать по всей цепочке до нужного. Или пристраивать хеширование.
Кстати, вставка/удаление в произвольное место и есть рандомный доступ. Тут все определяется тем, как список итерируется.
Таки опять " под конкретную задачу и реализация соответствующая. "
 
Имелось ввиду что то типа стандартной библиотеки как в Visual C++ в которой реализована продвинутая работа с массивами (стеками, списками)
что то типа такого
 

Стандартной - нету точно. Если бы были стандартные - не извращались бы тут по-французски. Из сложных типов данных есть только массивы. Хочешь реализовать стек или список - пиши самостоятельно. Впрочем, может быть, что-то в Code Base есть, но сомневаюсь я в этом.

Причина обращения: