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

 
возможно есть библиотека которую можно использовать для организация стека в MQL4
или готовый код
подскажите где найти
 
В смысле, изваять ФОРТ из mql4? Месье знает толк в извращениях.. .
 
Andrew2007:
возможно есть библиотека которую можно использовать для организация стека в MQL4
или готовый код
подскажите где найти


Позвольте полюбопытствовать, а зачем вам стек?, стек же вроде используется на низкоуровневых языках, например на ассемблере, а здесь массивы есть, намного удобней.
 
void push(int v, int &stack[])
{
    int p = stack[0] + 1;
    if (p >= ArraySize(stack))
    {
        Alert("Stack overflow"); 
        return; // or silently increase array size here
    }
    
    stack[p] = v;
    stack[0] = p;
}
 
int pop(int &stack[])
{
    int p = stack[0];
    
    if (p <= 0) // underflow
    {
        Alert("Stack underflow");
        return (0x80000000);
    }
    
    stack[0] = p - 1;
    return (stack[p]);
}
 
int start()
{
    int stack[63] = {0};
    
    push(2007, stack);
    Print(pop(stack));
    
    return (0);
}
 
Не уверен, что массивы удобнее, особенно если приходится быстро удалять/добавлять элементы где-нибудь в середине массива - или если размер массива заранее не определен. Насчет стека ничего не скажу, но вот списочком с удовольствием бы попользовался. .. Irtron, нет ли у тебя чего-нибудь аналогичного для структуры списка? Ну пусть в нем будут одни только целые элементы...
 
Mathemat:
Не уверен, что массивы удобнее, особенно если приходится быстро удалять/добавлять элементы где-нибудь в середине массива - или если размер массива заранее не определен. Насчет стека ничего не скажу, но вот списочком с удовольствием бы попользовался. .. Irtron, нет ли у тебя чего-нибудь аналогичного для структуры списка? Ну пусть в нем будут одни только целые элементы...

Позволю себе несогласится,  для бытрого добавления/удаления элементов массивы прекрасно подходят, так как имеют индексы, а по  индексу можно легко и быстро получить/заменить любой элемент. что касательно определения размерности массива - то кто мешает изменять размер массива непосредственно перед записью элементов (в случае когда объем данных предварительно неизвестен) .
 
Хорошо, xeon, а если надо вставить между 1005-м и 1006-м элементом массива из 5000 эл-тов еще один? С массивами это сплошной геморр. А со списками - очень удобно.
 
Mathemat:
Irtron, нет ли у тебя чего-нибудь аналогичного для структуры списка? Ну пусть в нем будут одни только целые элементы...
Да у меня и стека-то не было. Так, набросал навскидку.

Со списками универсального решения нет.
Если, скажем, доступ к элементам списка происходит в основном последовательно (т.е. при помощи итератора next()), то можно поизвращаться с дополнительным списком индексов основного списка.
В случае произвольного доступа по индексу проще делать в лоб, сдвигая верх массива в ту или иную сторону. Можно, конечно, и это соптимизировать раз эдак в... Да, вообще, во сколько надо, во столько и можно.
 

К стати, работа стека сильно напоминает вот эту юмористическую историю:

открыла-сумку-достала-оттуда-кошелку-закрыла-сумку-открыла-кошелку-достала-оттуда-
кошелек-закрыла-кошелку-открыла-сумку-положила-туда-кошелку-закрыла-сумку-открыла-
кошелек-положила-туда-билетик-закрыла-кошелек-открыла-сумку-достала-оттуда-кошелку-
закрыла-сумку-открыла-кошелку-положила-туда-кошелек-закрыла-кошелку-открыла-сумку-
положила-туда-кошелку-закрыла-сумку..

.

 
Mathemat:
Хорошо, xeon, а если надо вставить между 1005-м и 1006-м элементом массива из 5000 эл-тов еще один? С массивами это сплошной геморр. А со списками - очень удобно.


Ошибаетесь уважаемый :-) все просто, используете второе измерение, например так:

    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";
 
Хе-хе, месье - француз... Но это решение, мне кажется, довольно ограниченно, если массив постоянно подвергается такого рода изменениям (вставке/удалению).

В принципе это неплохая идея, вот только массив можно объявить как ArrayStr[N][2], в ArrayStr[i][0] записывать сами элементы, а в ArrayStr[i][1] - например, индекс следующего элемента. Получится что-то вроде очень гибкого списка. Причем можно легко вставлять новые и удалять из самой середины массива.
Причина обращения: