чем отличается

 

Друзья ! подскажите в чем смысловая разница в коде


for(int i=OrdersTotal();i>=0;i--)// Цикл в котором перебираем все открытые сделки

и 

for(int i=1; i<=OrdersTotal(); i++)          

 
там и там цикл перебора ордеров и разницы нет?
 
Если в результате выбора вы решите удалить этот ордер то вам надо i--,а в остальном неважно.
 
amirs >>:

Друзья ! подскажите в чем смысловая разница в коде



1. Направление перебора. Имеет существенное значение, если производится удаление ордеров: при этом меняется нумерация и некоторые ордера могут быть пропущены.

2. Скорость выполнения: условие выполнения цикла (то, что после первой точки с запятой - i<=OrdersTotal();  ) будет проверяться на каждом шаге цикла и на каждом шаге будет осуществляться ненужный вызов функции - а это самая "дорогая" с вычислительной точки зрения операция.

И самое главное: нумерация  идет от нулевого элемента. То есть у Вас в обоих случаях выход за пределы массива.

Правильная конструкция :

for(int i=OrdersTotal()-1;i>=0;i--)

к тому же универсальная  

Удачи. 

 
amirs писал(а) >>

Друзья ! подскажите в чем смысловая разница в коде



В дополнение к тому, что сказал Владислав, циклы явно отличаются количеством итераций.

Например, если OrdersTotal() возвращает значение 50.

то в первом цикле будет 51 проход, а во втором 50.

 

При удалении ордера требуется организовать цикл с начала и с обновлением данных. Ордер удалили, количество ордеров изменилось, изменился порядковый номер....

Направление цикла важно, если требуется найти, например, последний ордер. Нашли ордер, прервали цикл...

for(int i=OrdersTotal()-1;i>=0;i--)
 
Всем Спасибо за участие!
Причина обращения: