Borrar una matriz de elementos definidos - página 4

 
Sí... La perfección no tiene límites.
 

Sí... Monstruos de la programación...

Personalmente escribiría más o menos lo mismo que @Dmitry Fedoseev, el código más comprensible y al mismo tiempo eficiente, respectivamente, la velocidad sería más o menos la misma.

Creo que el código de @Nikolai Semko es una perversión bastante seria, pero creo que debería ser útil. Y creo que es correcto y bueno, si cada milésima de segundo es importante.

 
Georgiy Merts:

Sí... Monstruos de la programación...

Personalmente escribiría más o menos lo mismo que @Dmitry Fedoseev, el código más comprensible y al mismo tiempo eficiente, respectivamente, la velocidad sería más o menos la misma.

Creo que el código de @Nikolai Semko es una perversión bastante seria, pero creo que debería ser útil. Y creo que es correcto y bueno, si cada milésima de segundo es importante.

No me gusta que en ambos casos haya que arrastrar y soltar varias veces el mismo elemento. Se siente análogo a la clasificación por burbujas, que es la más lenta en la gran mayoría de los casos. Es más sencillo, claro y fiable hacerlo como se hace en DMS: los elementos se marcan para ser borrados (mientras se cuenta cuántos están marcados), luego los que no se marcan (una vez) se mueven a una nueva copia con el número restante de elementos del array. En términos de memoria, esto adicionalmente sólo ocupará espacio para el array de banderas ("marcado para borrar"), y la segunda copia acortada del array, junto con la original, no requerirá más memoria que la necesaria para un ArrayResize. También es posible acelerar el marcado si no es un solo valor el que se está eliminando, sino un array, de modo que no siempre hay que recorrer todos sus valores. Para ello, defina un máximo y un mínimo en él (para las cadenas también es posible) y omita los elementos menores que el mínimo o mayores que el máximo sin marcarlos.

 
Dmitry Fedoseev:

Últimamente te has metido en un charco, como en este hilo )

Vladimir Pastushak:

mostrar su variante de realización

Marketeer ya ha escrito variante, que creo que es óptimo, no veo el sentido en la duplicación, excepto que el tamaño del ciclo de sacar
 
Dmitry Fedoseev:

Así está mejor:

La mejor opción, las mediciones de velocidad deberían confirmarlo.
 
TheXpert:

Últimamente te has metido en un charco, como en este hilo).

Marketeer ya ha escrito una opción que considero óptima, no veo el sentido de duplicarla

Oh, has suspendido tu tesis doctoral...

 
Vladimir:

No me gusta el hecho de que en ambos casos haya que arrastrar y soltar varias veces el mismo elemento.

En ambos casos, cada elemento se arrastra un máximo de una vez.
 
TheXpert:
Uno tiene 42 productos, el otro 6, el tercero 30. Me da miedo imaginarme el gilipollas que hay dentro con semejantes preguntas y respuestas

¡El "experto" es genial! Ha iluminado al público exponiendo los encantos de Market :-)) Puede que no sea un experto, pero personalmente estoy muy en desacuerdo con Dmitry Fedoseyev...

 
Denis Kirichenko:

Pero personalmente, estoy muy en desacuerdo con Dmitri Fedoseyev...

no imponer.

 
Sólo en la tarea que se está llevando a cabo. Borrar el valor y vaciar
template<typename T>
int arrayFilter(T &data[], const T value)
{
     int s, d = s = ArraySize(data);
     
     for(int i=d-1; i>=0; i--)
          if(data[i] == value || data[i] == NULL)
          {
               s--;
               for(int j=i; j<s; j++)
                    data[j]=data[j+1];
          }
  
     if(d > s)
          ArrayResize(data, s);
     
     return s;
}

void OnStart()
{
     long array[] = {1, 2, 3, 6, 9, 5, 6, 3, 25, ,, 6, 8, NULL, 7, NULL, 4};
     Print( arrayFilter<long>(array, 3) );
}