Bei N
Elementen nur das erste (0) und letzte (N-1) Element verarbeiten.Schleife nur über erstes und letztes Element
Aber, wenn N = 1
, nur das einzelne Element einmal verarbeiten.
Die Verwendung einer Schleife, die je nach Bedarf ein- oder zweimal ausgeführt wird, verhindert, dass der Schleifenkörper dupliziert wird. Wenn es eine lesbare Möglichkeit gibt, dies zu tun, hat dies einen Vorteil für die Quellcodegröße. Es kann auch Vorteile für die Maschinencode-Größe haben, wenn der Schleifenkörper groß ist und der Compiler nicht zu einer Duplizierung führt.
Ich habe versucht, durch N-1
Inkrementieren aber es wird nicht funktionieren, wenn N=1
(Schleifen für immer). Gibt es Tricks (Reverse Loop f.i), die das beheben?
for (i = 0 ; i < N ; i += (N - 1))
Edit:
Mein ursprüngliches Problem betrifft drei verschachtelte Schleifen in x, y, z-Richtung, weshalb ich konnte nicht nur Prozess Elem [0]) und Elem [N-1]. Jetzt habe ich die folgende
#define forEachLglBound(i_,j_,k_) \
for(Int i_ = 0;i_ < NPX;i_+=((NPX>1) ? (NPX-1) : 1)) \
for(Int j_ = 0;j_ < NPY;j_+=((NPY>1) ? (NPY-1) : 1)) \
for(Int k_ = 0;k_ < NPZ;k_+=((NPZ>1) ? (NPZ-1) : 1))
Warum brauchen Sie eine Schleife für eine Konstante zwei Elemente? – kaylum
Warum benötigen Sie eine for-Schleife, wenn Sie nur auf das erste und letzte Element zugreifen möchten? –
Warum? Schreiben Sie einfach eine Funktion, um die Arbeit zu erledigen, und rufen Sie sie mit 'array [0]' und 'array [N-1]' auf. Die Absicht wird viel klarer sein. – clcto