Borrar una matriz de elementos definidos - página 17

 
Алексей Тарабанов:

No te burles de la gente

Ni siquiera ha empezado ;-)

Ni siquiera he mencionado la "suma de comprobación" cuando hay un punto de referencia.

Se puede recordar sobre la asintótica, por la cual se estima finalmente la velocidad.
Y que depende de la cantidad de datos de entrada, del número de elementos a eliminar y de su ubicación/distribución (que en realidad NUNCA es uniforme).

y que se pueden/deben trazar gráficos.

el objetivo no merece la pena, pero de alguna manera hay que seguir la metodología

Podría seguir dos o tres páginas más :-)

 

Se ha añadido la opción de rotación, pausas y calentamiento (no se cuenta la primera pasada)

Archivos adjuntos:
 
Stanislav Dray:

He añadido una variante con rotación, pausas y calentamiento (no se tiene en cuenta la primera pasada)

Es extraño que muchos ejemplos no puedan funcionar correctamente con estructuras... Quizás no entiendo algo...

 
Vladimir Pastushak:

Es extraño que muchos ejemplos no puedan funcionar correctamente con estructuras... Quizás no entiendo algo...

Eliminar las estructuras en favor de las clases. Son más fáciles de trabajar en MQL.

 
Vladimir Pastushak:

Es extraño que muchos ejemplos no puedan funcionar correctamente con estructuras... Tal vez no entiendo...

¿Qué quieres decir? No sé a qué te refieres. ¿Qué ejemplos no funcionan bien? Todo funciona.

1

 
Vladimir Pastushak:

Es extraño que muchos ejemplos no puedan funcionar correctamente con estructuras... Quizás no entiendo algo...

Las funciones no saben qué campo de la estructura debe ser comparado.

 
Dmitry Fedoseev:

La función no sabe qué campo de la estructura debe ser comparado.

La función es comparar por campos. El resultado es la eliminación del último elemento de la matriz por alguna razón.

 
Lo descubrí, era el campo que se desplazaba en la cuerda, no toda la estructura...
 
Nikolai Semko:

Estudia el código.

He comprobado su código. Lo has hecho todo bien.

No entiendo por qué esa línea se lleva la mayor parte de mi tiempo:

//+------------------------------------------------------------------+
int PeterArray(int &Arr[],const int val) // вариант Peter Konow
  {
   int deleted=0,q=0;
   for(int a1=0; a1<ArraySize(Arr); a1++)
     {
      if(deleted)Arr[q]=Arr[q+deleted];
      if(Arr[q]==val){deleted++; q--;} <-----------Выполнение этих операций занимает кучу времени.
      q++;
     }
   ArrayResize(Arr,q);
   return (q);
  }
//+------------------------------------------------------------------+

Sin esa línea, el código se ejecuta en 2 microsegundos. Pero no puedes hacerlo sin él.

Puede que no sea la solución más rápida, pero es una de las más concisas.


SZY. Has cometido un error al escribir la función por mi solución:

Mi función no es

ArrayResize(Arr,q);

а

ArrayResize(Arr,ArraySize(Arr) - deleted);

Pero gracias de todos modos.

 
Vladimir Pastushak:

La función está comparando campos. El resultado es que, por alguna razón, se borra el último elemento del array.

¿Al asignar un elemento a otro, es decir, al utilizar el signo "="?

Me he dado cuenta de eso, es mejor hacer tu propia copia. No puedes confiar en nada.

Razón de la queja: