Discussão do artigo "Guia Prático MQL5: Implementando um Array Associativo ou um Dicionário para Acesso Rápido ao Dados" - página 2

 
Artigo muito bom e interessante. Muito obrigado.
[Excluído]  
bom artigo e ajuda para os novatos
 

Peço desculpas!

Estou apenas aprendendo sobre listas e criação de objetos.

Quando comecei a testar e a pesquisar seu código, encontrei um pequeno erro, mas posso estar errado.

Ao medir a velocidade na comparação entre sua biblioteca e a biblioteca padrão, para saber quem é mais rápido, você diz uma coisa na descrição, mas mostra outra no gráfico. Você não notou isso ou estou lendo o gráfico errado?

P.P. 4.3.

 
BmC:

Peço desculpas!

Estou apenas aprendendo sobre listas e criação de objetos.

Quando comecei a testar e a pesquisar seu código, encontrei um pequeno erro, mas posso estar errado.

Ao medir a velocidade na comparação entre sua biblioteca e a biblioteca padrão, para saber quem é mais rápido, você diz uma coisa na descrição, mas mostra outra no gráfico. Você não notou isso ou estou lendo o gráfico errado?

P.P. 4.3.

No início, escrevi que era de fato um erro, mas depois olhei o gráfico com mais atenção: não, está tudo correto. O eixo y mostra o tempo, quanto maior ele for, mais lenta é a adição de itens. O gráfico mostra que adicionar um milhão de itens ao CArrayObj leva 5 segundos, enquanto adicionar o mesmo número de itens ao CDictionary leva 1 segundo. Ou seja, especificamente em tarefas com grande adição sequencial de elementos, o modelo de realocação de memória do CDictionary vence em comparação com o modelo de realocação padrão no CArrayObj, que foi necessário para mostrar.

 
Vasiliy Sokolov:

No início, escrevi que isso era realmente um erro, mas depois examinei o gráfico com mais cuidado: não, está tudo correto. O eixo y mostra o tempo; quanto maior ele for, mais lento será o processo de adicionar um item. O gráfico mostra que adicionar um milhão de itens ao CArrayObj leva 5 segundos, enquanto adicionar o mesmo número de itens ao CDictionary leva 1 segundo. Ou seja, especificamente em tarefas com grande adição sequencial de itens, o modelo de realocação de memória do CDictionary vence em comparação com o modelo de realocação padrão no CArrayObj, que era necessário mostrar.

Não, ainda é um erro. Mas isso não importa para mim, mas para outros leitores, sim. que também entenderão como eu desde o início. Ele deve ser escrito com muita precisão, pois leva a um equívoco distante. ))))

quote: Ele usa a macro TEST_ARRAY. Se ela estiver definida, o teste executará operações em CArrayObj, caso contrário, em CDictionary. O primeiro teste para adicionar novos elementos vence o CDictionary, poisseu modelo de realocação de memória foi melhor nesse caso específico:

DEVE TER: Ele usa a macro TEST_ARRAY. Se ela "NÃO" estiver definida, o teste executará operações no CArrayObj; se "SIM", executará operações no CDictionary. O primeiro teste sobre adição de novos elementos vence o CDictionary, pois seu modelo de realocação de memória era melhor nesse caso específico:

Todo o erro está diretamente no código, desde o início ele vai preencher a lista por meio do CDictionary e, em seguida, se a macro TEST_ARRAY não estiver definida , vai para CArrayObj. Isso se deve ao cansaço de trabalhar em um único material.

MAS É UM MATERIAL EXCELENTE E DEMORADO. ELE ME AJUDOU MUITO A ENTENDER EM PONTEIROS E CRIAÇÃO DE OBJETOS. FOI MUITO DIFÍCIL ENTRAR NO ASSUNTO. E VOCÊ PRECISA DISSO EM UM CURTO PERÍODO DE TEMPO......

 

BmC:

TIVE MUITA AJUDA PARA DESCOBRIR EM PONTEIROS E CRIAÇÃO DE OBJETOS.

Em MQL4 e MQL5, não há ponteiros, mas descritores, o que é uma composição completamente diferente.
 
Alexey Volchanskiy:
В MQL4 и MQL5 нет указателей, есть дескрипторы, это совсем другой компот.
Alexey Volchanskiy
:

Na MQL4 e na MQL5 não há ponteiros, há descritores, e essa é uma composição completamente diferente.

Você está tentando ser inteligente ou está apenas tentando obter uma classificação. Se você não tiver tempo para ler o artigo e o que eu escrevi, peço que não faça mais isso, mas escreva para os criadores da MetaQuotes Software Corp. o que eles têm ou o que deveria ser, mas não aqui para pessoas inteligentes. Para aqueles que desejam isso no futuro, como você: www.mql5.com/ru/docs/basis/types/object_pointers. 

Você deve ter uma classificação apenas para essas declarações estúpidas. Se não tiver nada para fazer, leia a referência MQL novamente. Se você precisa tanto de classificação em declarações estúpidas, então escreva para os criadores de suas ideias estúpidas, pois lá eles conseguem dinheiro para você.

Se você não entendeu o que eu queria dizer com isso, então, por exemplo, informo que você ainda pode escrever ideias estúpidas para os criadores: " class="linkator">"Descritores de objetos".

Em seguida, você justifica: "Já que sou tão estúpido e quero que todas as minhas coisas estúpidas se tornem afirmações verdadeiras e razoáveis, salve-me "criador".

Se eu fosse o "criador", eu o aconselharia a comprar uma flor da "flor de sete flores". Mas isso não importa para você, pois você já escreveu três afirmações. 3093+3=3096. Eu o ajudei, agora me ajude a não escrever mais aqui.

Estou no fórum há muito tempo e vejo que suas declarações são sempre estúpidas e constantes. Você, no tópico, escreve sempre em trechos e sempre corrige todo mundo, e aqui faz declarações tão estúpidas. Eu sei por que você está tão irritado, porque eu também sou o mesmo usuário iniciante que sobe no fórum para reabastecer o conhecimento e quando um "guru" com uma classificação de 3000, algo escreve para ele ouvir. E ELE é apenas um tolo que estabeleceu uma meta para obter uma classificação para si mesmo. Ele nem sequer pensa que sua declaração direciona o leitor do ramo para outra direção.

Peço desculpas novamente. Se você for pego em minhas respostas novamente, insistirei em bloqueá-lo e você perderá sua classificação estupidamente pontuada. Especialmente para provar sua estupidez ao moderador é inútil, pois suas respostas são sempre curtas e estúpidas em relação ao tópico.

[Excluído]  

Já estamos em setembro, e essa classe não está na biblioteca padrão:)

A propósito, uma pergunta sobre o código da classe em si. Qual foi o objetivo de defini-la no final do código?

#define  FOREACH_DICT(dict) for(CObject* node = (dict).GetFirstNode(); node != NULL; node = (dict).GetNextNode())
porque ela não é usada em nenhum lugar dos exemplos...
 
Konstantin Karpov:

Já estamos em setembro, e essa classe não está na biblioteca padrão:)

A propósito, uma pergunta sobre o código da classe em si. Qual foi o objetivo de defini-la no final do código?

porque ela não é usada em nenhum lugar dos exemplos...
Ela é usada. No parágrafo 5.3: "Methods for enumerating elements in the dictionary" (Métodos para enumerar elementos no dicionário). A enumeração de dicionário se assemelha bastante à enumeração de lista, portanto, a operação de enumeração não é exatamente padrão e o conteúdo de for difere do conteúdo da enumeração de matriz clássica. Para facilitar a nossa vida e a dos usuários, e para que não tenhamos que nos lembrar dolorosamente da enumeração de nós, essa macro foi introduzida.
 
Chamando o Sr. EA