template <typename T> void Swap( T &Value1, T &Value2 ) { const T Tmp = Value1;
Value1 = Value2; Value2 = Tmp; }
// Classificar uma matriz de qualquer tipo simples template <typename T> bool MyArraySort( T &Array[] ) { if (!ArraySort(Array)) { constint Size = ArraySize(Array);
for (int i = 0; i < Size - 1; i++) { const T Tmp = Array[i];
for (int j = i + 1; j < Size; j++) if (_R(Tmp) == Array[j]) // TypeToBytes.mqh { Swap(Array[i + 1], Array[j]);
Também foi adicionada a operação byte a byte com matrizes
// Trabalhando com matrizesshort Array[] = {1, 2, 3};
ArrayPrint(_R(Array).Bytes); // Imprimir a representação byte a byte da matriz Array
PRINT((_R(Array) == _R(Array).Bytes)) // Certifique-se de que a comparação de matriz byte a byte funcione.
_W(Color) = Array; // Gravação byte a byte da matriz Array em Color
PRINT(Color) // Certifique-se de que a cor agora seja C'1,0,2'.
ArrayPrint(_R(Color).Bytes); // Imprimir representação byte a byte da coruchar Array2[];
ArrayCopy(Array2, _R(Tick).Bytes); // Escreva a representação em bytes de Tick em Array2
PRINT((_R(Tick) == Array2)) // Certifique-se de que Tick e Array2 correspondam byte a byteMqlTick Tick2 = {0};
_W(Tick2) = Array2; // Gravar a matriz Array2 em Tick2
PRINT((_R(Tick) == Tick2)) // Certifique-se de que Tick e Tick2 sejam iguais.int Array3[] = {INT_MIN, INT_MAX};
ArrayPrint(_R(Array3).Bytes); // Imprimir a representação byte a byte da matriz Array3
ArrayPrint(_R(Array).Bytes); // Imprimir a representação byte a byte da matriz Array
_ArrayCopy(Array3, Array); // Copiar a matriz Array para a matriz Array3, byte a byte
ArrayPrint(_R(Array3).Bytes); // Certifique-se de que a representação em bytes da matriz Array3 corresponda à
Também foi adicionada a operação byte a byte com cadeias de caracteres
// Trabalhar com cadeias de caracteresstring Str = "abcd";
_W(i) = Str; // Escreva a string em (int)i byte por byte
PRINT((_R(i) == Str)) // Comparação byte a byte de int e sring
ArrayPrint(_R(i).Bytes); // Procurou bytes i
ArrayPrint(_R(Str).Bytes); // Olhou para os bytes Str
PRINT(_R(Str)[(short)1]) // Pegou o valor curto misturando 1 em Str
PRINT(Str)
_W(Str)[2] = "98765"; // Gravação byte a byte de uma string em uma string no deslocamento 2
PRINT(Str)
string StrArray[] = {"123", "45", "6789"};
_W(Str) = StrArray; // Escreva um array de strings em uma string
PRINT(Str)
_W(Str)[3] = (uchar)0; // Um zero é gravado no byte no deslocamento 3, cortando assim a string (comprimento - 3 caracteres ANSI (4 bytes)).
PRINT(Str);
#include <TypeToBytes.mqh>
// Mesclar todas as strings do array em uma única stringstring StringArrayConcatenate( conststring &StrArray[] )
{
string Str = "";
constint Size = ArraySize(StrArray);
for (int i = 0; i < Size; i++)
Str += StrArray[i];
return(Str);
}
voidOnStart()
{
string StrArray[] = {"abcd", "123", "zxc", "890", "qwert"};
string Str1, Str2;
// Mesclar todas as strings do array em uma única string
Str1 = StringArrayConcatenate(StrArray);
_W(Str2) = StrArray;Print(Str1);
Print(Str2);
}
Destacado - o mesmo resultado de maneiras muito diferentes
// Definir uma estrutura personalizadastruct STRUCT
{
int i;
// Definir o operador de atribuiçãovoidoperator =( const STRUCT& ) {}
};
// Demonstração do resultado de contornar o operador de atribuição personalizado da estrutura _R pela função de biblioteca
STRUCT Struct; // Criou um objeto com um operador de atribuição personalizado
Struct.i = 1;
ArrayPrint(_R(Struct).Bytes); // Certifique-se de que o operador de atribuição
PRINT(_R(Struct) == Struct) // não afeta a funcionalidade _R da biblioteca// Verificação da "correção" do operador de atribuição de tipo
PRINT(_WRONG_ASSIGN_OPERATOR(int)) // Correto
PRINT(_WRONG_ASSIGN_OPERATOR(MqlTick)) // Correto
PRINT(_WRONG_ASSIGN_OPERATOR(STRUCT)) // Não está correto
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Color = (color)((Color & 0xFFFFFF) + (Alpha << 24));
_W(Color)[3] = Alpha;
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Qualquer dúvida de novato sobre MQL4, ajuda e discussão sobre algoritmos e códigos
fxsaber, 2017.03.07 13:55
template <typename T>
void Swap( T &Value1, T &Value2 )
{
const T Tmp = Value1;
Value1 = Value2;
Value2 = Tmp;
}
// Classificar uma matriz de qualquer tipo simples
template <typename T>
bool MyArraySort( T &Array[] )
{
if (!ArraySort(Array))
{
const int Size = ArraySize(Array);
for (int i = 0; i < Size - 1; i++)
{
const T Tmp = Array[i];
for (int j = i + 1; j < Size; j++)
if (_R(Tmp) == Array[j]) // TypeToBytes.mqh
{
Swap(Array[i + 1], Array[j]);
i++;
}
}
}
return(true);
}
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Bibliotecas: mapeamento de arquivos sem DLL
fxsaber, 2017.04.03 16:07
Obrigado ao autor pela biblioteca!
Criei funções para transferir quaisquer dados. O script abaixo mostra seu trabalho no exemplo de ticks
Resultado
Um exemplo de possível aplicação prática de inovações.
Destacado - o mesmo resultado de maneiras muito diferentes
Um exemplo de como esse recurso pode ser útil para detectar possíveis erros.
Escreva e execute o script.
Resultado.
_WRONG_ASSIGN_OPERATOR(STRUCT) = trueIsso indica que o operador de atribuição não copiará uma estrutura em uma estrutura do mesmo tipo.
Se adicionarmos mais à estrutura,
o resultado será o mesmo.
Parece que, ao corrigir esse operador para
tudo estaria correto, mas a biblioteca diz o contrário.
Talvez esse seja o ponto mais sutil desse exemplo.
Nós o corrigimos para
e obtemos o resultado
_WRONG_ASSIGN_OPERATOR(STRUCT) = falseAgora o operador de cópia está escrito corretamente!
Você pode verificar a correção dos operadores de atribuição/cópia de qualquer estrutura simples de maneira semelhante.
Resultado
Uma cadeia de caracteres NULL tem comprimento zero em bytes. Uma cadeia vazia tem 1 byte de comprimento (onde zero é o fim da cadeia).