Como remover um elemento de uma matriz (bidimensional unidimensional)?

 
Como remover um elemento de uma matriz? Preciso saber o número de elementos armazenados nele?
 

Existe uma função, embora ninguém a tenha visto (nem na ajuda nem no site), mas ela está lá )


 
Ilya Malev:

Existe uma função, embora ninguém a tenha visto (nem na ajuda nem no site), mas ela está lá )

oh, uma função secreta, e como ela funciona?
 
Ilya Malev:

Existe uma função, embora ninguém a tenha visto (nem na ajuda nem no site), mas ela está lá )


Em breve

 

Para excluir um único item, a função

void OnStart()
{
 double array[];
 CopyOpen(_Symbol, PERIOD_CURRENT, 0, 6, array);
 ArrayPrint(array);
 dellArrayElement(3, array);
 ArrayPrint(array);
}/*******************************************************************/

void dellArrayElement(int shift, double &arr[])
{
 int arrSize = ArraySize(arr);
 if(shift > arrSize)
  return;
 if(shift < arrSize)
 ArrayCopy(arr, arr, shift, shift+1);
 ArrayResize(arr, arrSize-1);
}

Resultado

2018.12.22 09:55:06.206 !00 (EURUSD,M15)        1.13588 1.13607 1.13588 1.13612 1.13586 1.13614
2018.12.22 09:55:06.206 !00 (EURUSD,M15)        1.13588 1.13607 1.13588 1.13586 1.13614

Então você pode converter esta função em tipo bool, para que você possa controlar sua execução. Basicamente, se você é inteligente e pode controlar os valores que lhe envia, você pode usá-lo de qualquer maneira...

Lembre-se, você não pode reduzir o tamanho das matrizes estáticas.

 
Alexey Viktorov:

Para excluir um único item, a função

Resultado

Então você pode converter esta função em tipo bool, para que você possa controlar sua execução. Basicamente, se você é inteligente e pode controlar os valores que lhe envia, você pode usá-lo de qualquer maneira...

Não esqueça que você não pode reduzir o tamanho das matrizes estáticas.

O camarada escreveu: unidimensional e bidimensional. Sua função não funciona com bidimensionais. Mostre-me como fazer uma função com o mesmo nome funcionar para ambos :)

 
Alexey Viktorov:

Não esqueça que as matrizes estáticas não podem ser reduzidas em tamanho.

Não estou reduzindo o tamanho da matriz, estou removendo um elemento da mesma, estas são coisas diferentes. Eu entendo que sua função eliminou o valor1.13612, está especificado na linhadellArrayElement(3, array); ou seja, o 3º elemento é removido do array, ou seja, entendido corretamente? A que velocidade essas experiências estão carregando muito o programa?

 
Aleksey Semenov:
oh, uma função secreta, e como ela funciona?

Em C++ há tais funções, você liga a biblioteca e a ação é executada. Mas levamos em conta o fato de que o mql não tem tais funções e queremos usar funções manuscritas.

 

Encontrei estehttp://kvodo.ru/urok-7-2-massivyi-osnovnyie-operatsii.html (e também este https://purecodecpp.com/archives/1935)

Suponha que precisamos removero m-ésimo elemento em númeroda matrizX que consiste emn elementos. Para isso, basta escrever (m+1)-ésimo elemento no lugar do elementom, (m+2)-ésimo elemento no lugar do elemento (m+1)-ésimo, e assim por diante,n-1 no lugar de(n-2)e usarn-1elementoquando trabalhar com esta matriz mais adiante:

cout<<"\n m="; cin>>m; //ввод номера элемента, подлежащего удалению
for (i=m; i<n-1; X[i+1],i++); //удаление m-го элемента
for (i=0; i<n-1; i++) cout<<X[i]<<"\t"; //вывод измененного массива
n--; //уменьшение количества элементов в массиве

Mas isso é com C++. Mas aqui precisamos saber o número de itens armazenados na matriz. Você precisa escrever uma função que leia os elementos à medida que forem escritos.

 
Alexey Viktorov:

Para apagar um elemento, esta função estará bem

E se você quiser excluir, por exemplo, não um valor de preço, mas uma data de uma matriz,CopyOpen funcionará com datas, como entendi da ajuda que esta função funciona com preços?

 
Ilya Malev:

Existe uma função, embora ninguém a tenha visto (nem na ajuda nem no site), mas ela está lá )


Como funciona?

int ArrayRemove()

Não há uma descrição na ajuda, onde posso ler sobre isso?