Wie entferne ich ein Element aus einem Array (eindimensional und zweidimensional)?

 
Wie kann ich ein Element aus einem Array entfernen? Muss ich die Anzahl der darin gespeicherten Elemente kennen?
 

Es gibt eine Funktion, die zwar noch niemand gesehen hat (weder in der Hilfe noch auf der Website), aber sie ist vorhanden.)


 
Ilya Malev:

Es gibt eine Funktion, die zwar noch niemand gesehen hat (weder in der Hilfe noch auf der Website), aber sie ist vorhanden.)

Oh, eine geheime Funktion, und wie funktioniert sie?
 
Ilya Malev:

Es gibt eine Funktion, die zwar noch niemand gesehen hat (weder in der Hilfe noch auf der Website), aber sie ist vorhanden.)


Demnächst verfügbar

 

Um ein einzelnes Element zu löschen, wird die Funktion

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

Ergebnis

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

Dann können Sie diese Funktion in den Typ bool umwandeln, so dass Sie ihre Ausführung kontrollieren können. Wenn Sie klug sind und die Werte kontrollieren können, die Sie an das Gerät senden, können Sie es trotzdem verwenden...

Denken Sie daran, dass Sie die Größe von statischen Arrays nicht verringern können.

 
Alexey Viktorov:

Um ein einzelnes Element zu löschen, wird die Funktion

Ergebnis

Dann können Sie diese Funktion in den Typ bool umwandeln, so dass Sie ihre Ausführung kontrollieren können. Wenn Sie schlau sind und die Werte kontrollieren können, die Sie an das Gerät senden, können Sie es trotzdem verwenden...

Vergessen Sie nicht, dass Sie die Größe von statischen Arrays nicht verringern können.

Der Genosse hat geschrieben: eindimensional und zweidimensional. Ihre Funktion funktioniert nicht mit zweidimensionalen. Zeigen Sie mir, wie man eine Funktion mit demselben Namen für beide Funktionen verwenden kann :)

 
Alexey Viktorov:

Vergessen Sie nicht, dass statische Arrays nicht verkleinert werden können.

Ich verkleinere das Array nicht, ich entferne ein Element daraus, das sind unterschiedliche Dinge. Ich verstehe, dass Ihre Funktion den Wert1.13612 gelöscht hat, er ist in der ZeiledellArrayElement(3, array) angegeben; d.h. das 3. Element wird aus dem Array entfernt, d.h. richtig verstanden? Wie schnell sind solche Experimente, bei denen das Programm viel geladen wird?

 
Aleksey Semenov:
Oh, eine geheime Funktion, und wie funktioniert sie?

In C++ gibt es solche Funktionen, man schließt die Bibliothek an und die Aktion wird ausgeführt. Aber wir berücksichtigen die Tatsache, dass mql nicht über solche Funktionen verfügt und wollen handschriftliche Funktionen verwenden.

 

Ich habe dies gefundenhttp://kvodo.ru/urok-7-2-massivyi-osnovnyie-operatsii.html (und auch dies https://purecodecpp.com/archives/1935)

Angenommen, wir müssendas m-te Element in der Anzahl vonn Elementenaus einem FeldX entfernen. Dazu schreibt man einfach das (m+1)-te Element anstelle des Elementsm, das (m+2)-te Element anstelle des (m+1)-ten und so weiter,n-1 anstelle von(n-2)und verwendetn-1Element, wenn man weiter mit diesem Array arbeitet:

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

Aber das ist mit C++. Hier müssen wir jedoch die Anzahl der im Array gespeicherten Elemente kennen. Sie müssen eine Funktion schreiben, die die Elemente so liest, wie sie geschrieben werden.

 
Alexey Viktorov:

Um ein Element zu löschen, eignet sich diese Funktion

Und wenn Sie z.B. nicht einen Preiswert, sondern ein Datum aus einem Array löschen möchten, funktioniertCopyOpen dann auch mit Datumsangaben, da ich in der Hilfe gelesen habe, dass diese Funktion mit Preisen funktioniert?

 
Ilya Malev:

Es gibt eine Funktion, die zwar noch niemand gesehen hat (weder in der Hilfe noch auf der Website), aber sie ist vorhanden.)


Wie funktioniert das?

int ArrayRemove()

In der Hilfe gibt es dazu keine Beschreibung, wo kann ich das nachlesen?

Grund der Beschwerde: