Limpar um conjunto de elementos definidos - página 17

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

Não faça troça das pessoas

Nem sequer começou ;-)

Eu nem sequer mencionei o "checksum" quando há uma referência.

Pode-se lembrar sobre assimptóticos, pelos quais a velocidade é finalmente estimada.
E que depende da quantidade de dados de entrada, do número de elementos a serem removidos e sua localização/distribuição (que na realidade NUNCA é uniforme).

e que os gráficos podem/devem ser traçados.

a meta certamente não vale o esforço, mas de alguma forma a metodologia deve ser seguida

Eu poderia continuar por mais duas ou três páginas :-)

 

Adicionada rotação, pausas e opção de aquecimento (o primeiro passe não é contado)

Arquivos anexados:
 
Stanislav Dray:

Acrescentei uma variante com rotação, pausas e aquecimento (o primeiro passe não é levado em conta)

É estranho que muitos exemplos não possam funcionar corretamente com estruturas... Talvez eu não entenda algo...

 
Vladimir Pastushak:

É estranho que muitos exemplos não possam funcionar corretamente com estruturas... Talvez eu não entenda algo...

Livre-se das estruturas em favor das classes. São mais fáceis de trabalhar com eles na MQL.

 
Vladimir Pastushak:

É estranho que muitos exemplos não possam funcionar corretamente com estruturas... Talvez eu não entenda...

O que você quer dizer com isso? Eu não sei o que você quer dizer. Que exemplos não funcionam bem? Tudo funciona.

1

 
Vladimir Pastushak:

É estranho que muitos exemplos não possam funcionar corretamente com estruturas... Talvez eu não entenda algo...

As funções não sabem qual campo da estrutura deve ser comparado.

 
Dmitry Fedoseev:

A função não sabe qual campo da estrutura deve ser comparado.

A função é comparar por campos. O resultado é a eliminação do último elemento da matriz, por algum motivo.

 
Imaginei que era o campo a deslocar-se na corda, não toda a estrutura.
 
Nikolai Semko:

Estude o código.

Checou seu código. Você fez tudo certo.

Só não entendo porque essa linha toma a maior parte do meu tempo:

//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+

Sem essa linha, o código é executado em 2 microssegundos. Mas você não pode fazê-lo sem ele.

Pode não ser a solução mais rápida, mas é uma das mais concisas.


SZY. Você cometeu um erro ao escrever a função pela minha solução:

Minha função não é

ArrayResize(Arr,q);

а

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

Mas obrigado de qualquer forma.

 
Vladimir Pastushak:

A função é comparar os campos. O resultado é, por alguma razão, o último elemento da matriz é eliminado.

Ao atribuir um elemento a outro, ou seja, ao usar o sinal "="?

Eu notei que, é melhor fazer sua própria cópia. Você não pode confiar em nada.

Razão: