Effacement d'un tableau d'élément(s) défini(s) - page 4

 
Oui... Il n'y a pas de limites à la perfection.
 

Ouais... Les monstres de la programmation...

Personnellement, j'écrirais à peu près la même chose que @Dmitry Fedoseev, le code le plus compréhensible et en même temps le plus efficace, respectivement, la vitesse serait à peu près la même.

Je pense que le code de @Nikolai Semko est une perversion assez grave, mais je pense qu'il devrait être utile. Et je pense que c'est juste et bon, si chaque milliseconde est importante.

 
Georgiy Merts:

Ouais... Les monstres de la programmation...

Personnellement, j'écrirais à peu près la même chose que @Dmitry Fedoseev, le code le plus compréhensible et en même temps le plus efficace, respectivement, la vitesse serait à peu près la même.

Je pense que le code de @Nikolai Semko est une perversion assez grave, mais je pense qu'il devrait être utile. Et je pense que c'est juste et bon, si chaque milliseconde est importante.

Je n'aime pas le fait que, dans ces deux cas, le même élément soit glissé et déposé plusieurs fois. Il est analogue au tri à bulles, qui est le plus lent dans la grande majorité des cas. Il est plus simple, plus clair et plus fiable de procéder comme dans le SGD : les éléments sont marqués pour être supprimés (tout en comptant combien sont marqués), puis ceux qui ne sont pas marqués (une fois) sont déplacés vers une nouvelle copie avec le nombre restant d'éléments du tableau. En termes de mémoire, cela n'occupera en outre que l'espace du tableau des drapeaux ("marqué pour la suppression"), et la deuxième copie raccourcie du tableau, ainsi que l'original, ne nécessiteront pas plus de mémoire que celle nécessaire pour un ArrayResize. Il est également possible d'accélérer le marquage si ce n'est pas une valeur unique qui est supprimée, mais un tableau, de sorte que vous n'avez pas toujours besoin de parcourir toutes ses valeurs. Pour ce faire, définissez un maximum et un minimum dans celui-ci (pour les chaînes de caractères, cela est également possible) et sautez les éléments plus petits que min ou plus grands que max sans les marquer.

 
Dmitry Fedoseev:

Vous vous enfoncez dans une flaque d'eau ces derniers temps, tout comme dans ce fil de discussion).

Vladimir Pastushak:

montrez votre variante de réalisation

Marketeer a déjà écrit la variante, qui je pense est optimale, je ne vois pas le sens de la duplication, sauf que la taille du cycle sortir
 
Dmitry Fedoseev:

C'est mieux :

La meilleure option, les mesures de vitesse devraient le confirmer.
 
TheXpert:

Vous vous enfoncez dans une flaque d'eau ces derniers temps, comme dans ce fil de discussion).

Marketeer a déjà écrit une option que je considère optimale, je ne vois pas l'intérêt de la dupliquer.

Oh, tu as raté ta thèse de doctorat...

 
Vladimir:

Je n'aime pas le fait que, dans ces deux cas, il y ait plusieurs glisser-déposer du même élément.

Dans les deux cas, chaque élément est traîné au maximum une fois.
 
TheXpert:
L'un a 42 produits, l'autre 6, le troisième 30. J'ai peur d'imaginer quel trou du cul il y a à l'intérieur avec de telles questions et réponses.

L'"expert" est génial ! Il a illuminé le public en exposant les charmes du marché :-)) Je ne suis peut-être pas un expert, mais je ne suis pas du tout d'accord avec Dmitry Fedoseyev personnellement...

 
Denis Kirichenko:

Mais personnellement, je ne suis pas du tout d'accord avec Dmitri Fedoseyev...

à ne pas imposer.

 
Purement sur la tâche à accomplir. Supprimer la valeur et vider
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) );
}
Raison: