Im Allgemeinen herrscht hier eine große Verwirrung, da wir die tatsächliche Größe des zugewiesenen Speichers für das Array nicht kennen, um ihn zu überprüfen und zu optimieren.
Oder nehmen wir den folgenden Fall an: Zuerst ArrayResize(arr, 10, 100); Dann ArrayCopy(arr, arr2, 0, 0, 20); Wird die Größe des reservierten Speichers für das Array reduziert?
Wenn ich mich richtig an die Erklärung erinnere, wird die Größe der Reserve auch dann nicht verringert, wenn ihr ausdrücklich eine kleinere Zahl zugewiesen wird.
Falsch. Nach dem Beispiel in der Hilfe zu urteilen, funktioniert 0 tatsächlich als 0, und der Vorschlag -1 ist dann sehr sinnvoll.
Übrigens ist meine Argumentation bezüglich reserve_size nicht ganz korrekt. Tatsächlich ist es nur ein Schritt der Reserveänderung, aber nicht die Reserve selbst. Das heißt, sie wird wahrscheinlich nirgendwo gespeichert. Aber die Gesamtgröße des zugewiesenen Speichers ist bekannt. Wir würden sie gerne irgendwie kennen und idealerweise direkt verwalten.
Und ich werde meinen Vorschlag zu ArrayResize wie folgt umformulieren: wenn reserve_size=-1 angegeben wird, darf die Funktion die für das Array zugewiesene Speichergröße nicht verändern, wenn der Parameter size innerhalb dieses Bereichs liegt. Wenn size > capacity, wird der Puffer natürlich wachsen.
Ilyas: Im Array ("inside") wird gespeichert, wie viele Elemente dem Array zugewiesen sind.
Die Logik der Arbeit mit zugewiesenem (bedingtem) Code:
Ich verstehe, danke. Und am Anfang ist diese Zuordnung gleich -1, oder nicht? D.h. beim ersten Aufruf von ArrayResize(arr, 0, 100) wird die Zuordnung sein?
Ist diese Zuweisung am Anfang gleich -1 oder nicht?
Ist gleich 0
Alexey Navoykov:
D.h. wenn ArrayResize(arr, 0, 100) anfänglich aufgerufen wird, wird die Zuordnung erfolgen?
Die Zuweisung erfolgt nur, wenn sich die Größe des Arrays nach oben ändert. In diesem Fall ändert sich die Größe des Arrays nicht, da sie gleich 0 war.
Wie kann ich eine URL aus der Liste der vertrauenswürdigen Sites entfernen? Im Hilfetext heißt es:"Um eine Adresse aus der Liste der vertrauenswürdigen Adressen zu löschen, markieren Sie sie und drücken Sie die Schaltfläche "Löschen"", aber es gibt keine solche Schaltfläche.
Funktioniert so nicht die aktuelle 0?
Im Allgemeinen herrscht hier eine große Verwirrung, da wir die tatsächliche Größe des zugewiesenen Speichers für das Array nicht kennen, um ihn zu überprüfen und zu optimieren.
Wenn ich mich richtig an die Erklärung erinnere, wird die Größe der Reserve auch dann nicht verringert, wenn ihr ausdrücklich eine kleinere Zahl zugewiesen wird.
Falsch. Nach dem Beispiel in der Hilfe zu urteilen, funktioniert 0 tatsächlich als 0, und der Vorschlag -1 ist dann sehr sinnvoll.
Und ich werde meinen Vorschlag zu ArrayResize wie folgt umformulieren: wenn reserve_size=-1 angegeben wird, darf die Funktion die für das Array zugewiesene Speichergröße nicht verändern, wenn der Parameter size innerhalb dieses Bereichs liegt. Wenn size > capacity, wird der Puffer natürlich wachsen.
Die Logik für die Arbeit mit zugewiesenem (bedingtem) Code:
Im Array ("inside") wird gespeichert, wie viele Elemente dem Array zugewiesen sind.
Die Logik der Arbeit mit zugewiesenem (bedingtem) Code:
Ich verstehe, danke. Und am Anfang ist diese Zuordnung gleich -1, oder nicht? D.h. beim ersten Aufruf von ArrayResize(arr, 0, 100) wird die Zuordnung sein?
Ist diese Zuweisung am Anfang gleich -1 oder nicht?
D.h. wenn ArrayResize(arr, 0, 100) anfänglich aufgerufen wird, wird die Zuordnung erfolgen?
Die Zuweisung erfolgt nur, wenn sich die Größe des Arrays nach oben ändert. In diesem Fall ändert sich die Größe des Arrays nicht, da sie gleich 0 war.
Der Unterschied ist, dass im ersten Fall kein Fehler auftritt :)