Come si rimuove un elemento da un array (unidimensionale bidimensionale)?

 
Come si rimuove un elemento da un array? Ho bisogno di sapere il numero di elementi memorizzati in esso?
 

C'è una funzione, anche se nessuno l'ha vista (né nell'aiuto né sul sito web), ma c'è)


 
Ilya Malev:

C'è una funzione, anche se nessuno l'ha vista (né nell'aiuto né sul sito web), ma c'è)

Oh, una funzione segreta, e come funziona?
 
Ilya Malev:

C'è una funzione, anche se nessuno l'ha vista (né nell'aiuto né sul sito web), ma c'è)


In arrivo

 

Per cancellare un singolo elemento, la funzione

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

Risultato

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

Poi potete convertire questa funzione nel tipo bool, in modo da poter controllare la sua esecuzione. Fondamentalmente, se sei intelligente e puoi controllare i valori che gli mandi, puoi usarlo comunque...

Ricordate che non potete ridurre la dimensione degli array statici.

 
Alexey Viktorov:

Per cancellare un singolo elemento, la funzione

Risultato

Poi potete convertire questa funzione nel tipo bool, in modo da poter controllare la sua esecuzione. Fondamentalmente, se sei intelligente e puoi controllare i valori che gli mandi, puoi usarlo comunque...

Non dimenticate che non potete ridurre la dimensione degli array statici.

Il compagno ha scritto: monodimensionale e bidimensionale. La vostra funzione non funziona con le due dimensioni. Mostrami come far funzionare una funzione con lo stesso nome per entrambi :)

 
Alexey Viktorov:

Non dimenticate che gli array statici non possono essere ridotti di dimensione.

Non sto riducendo la dimensione dell'array, sto rimuovendo un elemento da esso, sono cose diverse. Ho capito che la vostra funzione ha eliminato il valore1.13612, è specificato nella lineadellArrayElement(3, array); cioè il 3° elemento viene rimosso dall'array, cioè capito bene? Quanto sono veloci questi esperimenti che caricano molto il programma?

 
Aleksey Semenov:
Oh, una funzione segreta, e come funziona?

In C++ ci sono tali funzioni, si inserisce la libreria e l'azione viene eseguita. Ma teniamo conto del fatto che mql non ha tali funzioni e vogliamo usare funzioni scritte a mano.

 

Ho trovato questohttp://kvodo.ru/urok-7-2-massivyi-osnovnyie-operatsii.html (e anche questo https://purecodecpp.com/archives/1935)

Supponiamo di dover rimuovere l'elementom-esimo in numerodalla matriceX composta dan elementi. Per questo, basta scrivere (m+1)-esimo elemento al posto dell'elementom, (m+2)-esimo elemento al posto di (m+1)-esimo, e così via,n-1 al posto di(n-2)e usare l'elementon-1quando si lavora ulteriormente con questo array:

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--; //уменьшение количества элементов в массиве

Ma questo con C++. Ma qui abbiamo bisogno di conoscere il numero di elementi memorizzati nell'array. Dovete scrivere una funzione che legga gli elementi come sono scritti.

 
Alexey Viktorov:

Per cancellare un singolo elemento, questa funzione andrebbe bene

E se si vuole cancellare ad esempio non un valore di prezzo ma una data da un array,CopyOpen funzionerà con le date, come ho capito dall'aiuto che questa funzione funziona con i prezzi?

 
Ilya Malev:

C'è una funzione, anche se nessuno l'ha vista (né nell'aiuto né sul sito web), ma c'è)


Come funziona?

int ArrayRemove()

Non c'è una descrizione nella guida, dove posso leggerlo?