AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schleife von 0 bis Count-1 mit Änderung

Ein Thema von t2000 · begonnen am 2. Dez 2020 · letzter Beitrag vom 2. Dez 2020
Antwort Antwort
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.029 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Schleife von 0 bis Count-1 mit Änderung

  Alt 2. Dez 2020, 13:03
Ja, das ist exakt schon immer das übliche Vorgehen beim Durchiterieren einer Liste. Aber Achtung! Sollte im Rahmen der Schleife ein Element gelöscht werden dann rückwärts durchlaufen. Es verändert sich ja beim Löschen die Anzahl der Elemente, und dann kracht es, weil das „Count-1“ zu Beginn unverändert bleibt und hinten raus die Elemente in der Liste nach vorne verschoben werden.
Michael Kübler

Geändert von scrat1979 ( 2. Dez 2020 um 13:07 Uhr)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#2

AW: Schleife von 0 bis Count-1 mit Änderung

  Alt 2. Dez 2020, 14:12
Ja, das ist exakt schon immer das übliche Vorgehen beim Durchiterieren einer Liste.
Ist es nicht eher eine Eigenschaft der for-schleife? Es ist ja nocht so, dass wie bei einer while oder until Schleife die Bedingung jedes mal neu geprüft würde. Oder wird sie geprüft aber die Endbedingung nicht neu gesetzt? Wo sind die Compiler-Experten ?
Ralph
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#3

AW: Schleife von 0 bis Count-1 mit Änderung

  Alt 2. Dez 2020, 14:47
Ja, dieses Verhalten ist für for-Schleifen definiert, deshalb sind diese auch schneller.

Der Compiler optimiert Schleifen nach Möglichkeit so, dass gegen 0 gezählt wird.
Das spart noch mal einen Vergleich je Durchlauf, das sieht dann übersetzt im Prinzip so aus:
Delphi-Quellcode:
 n := sl.Count - 1;
 for i := n downto 0 do
   sl.Add((n - i).ToString);
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz