leider programmiere ich das gerade in C++ (Arduino) und merke gerade, dass es diese Funktionen da nicht gibt
Aber nur zum Verständnis…hätte array_push alle anderen werte auch um einen Speicherplatz nach hinten geschoben ?
Das wäre genau das, was ich gerade bräuchte…
Nein Array Shift hatte das erste (älteste) gelöscht. Dadurch rutschen die anderen einen auf.
Wo steht den das du das in C++ machen willst…
Warum fragst du so etwas im IPS Forum? Da gibt es doch bestimmt bessere für
Michael
Ich habe zwar kein Beispiel parat, aber ich würde mir einfach die aktuelle Stelle vom Array merken und wenn das Maximum erreicht ist, von vorne anfangen.
Will man dann den ältesten Wert lesen, ist es der aktuelle Index +1 (oder halt 0 wenn bisher weniger als max Anzahl Daten geschrieben wurden).
Gibt bestimmt auch diverse fertige Libs oder Funktionen dafür. Da ich meistens aber nur bei MCUs mit C++ arbeite; bin ich da eher nicht der spezie
Habe da irgendwo auch mal eine Queue benutzt um einen dynamischen Datenringspeicher umzusetzen.
Michael
Ja, mit den Ringspeichern spiele ich auch gerade rum
Das scheint mir momentan am performativsten zu sein.
Mit einer for schleife 700 einträge um eins nach hinten zu kopieren hat mir gerade so die Kiste zerlegt, das ich eine halbe Stunde nichts mehr drauf spielen konnte
Ringpuffer ist natürlich immer gut, weil die Bedeutung dann schon am klarsten ist, sonst könnte man das so machen.
Das ist von der Performance sicher kein Problem
#include <stdio.h>
#include <string.h>
main(int argc, char *argv[])
{
double a[4];
int i, j, n = 4;
// initialisieren
memset(a, 0, sizeof(a));
for (i = 1; i < 5; i++) {
// wert setzen
memcpy(&a[0], &a[1], sizeof(a[0]) * n - 1);
a[n - 1] = (float)i;
for (j = 0; j < n; j++)
printf("a[%d]=%f
", j, a[j]);
printf("
");
}
}