Verschachtelte Schleifen in C++

Jinku Hu 12 Oktober 2023
  1. Verschachtelte for-Schleife zur Initialisierung einer zweidimensionalen Matrix in C++ verwenden
  2. Verschachtelte while-Schleife zur Initialisierung einer zweidimensionalen Matrix in C++ verwenden
  3. Verschachtelte do...while-Schleife zur Initialisierung einer zweidimensionalen Matrix in C++ verwenden
Verschachtelte Schleifen in C++

In diesem Artikel wird beschrieben, wie Sie verschiedene verschachtelte Schleifen in C++ verwenden.

Verschachtelte for-Schleife zur Initialisierung einer zweidimensionalen Matrix in C++ verwenden

Schleifen sind als Kontrollflussanweisungen bekannt, die im Allgemeinen den Programmzähler modifizieren und die ausführende CPU zwingen, zu einer anderen (normalerweise einer nicht sequentiellen) Anweisung im Programm zu wechseln. Der Programmzähler ist ein Register im CPU-Kern, das den nächsten Befehl eines laufenden Programms speichert.

Denken wir an die Darstellung des Programms auf Assembler-Ebene, wobei jede Anweisung einer einzelnen Maschinenanweisung entspricht. Der Code wird sequentiell ausgeführt, und die CPU ruft den folgenden Befehl ab, sofern nicht anders angegeben (frei gesagt, da moderne CPU-Kerne massiv optimierte Maschinen sind, die mehrere Befehle und oft von nicht sequentiellen Stellen im Programm abrufen können). Wir müssen also in der Assemblersprache mit speziellen Anweisungen angeben, die Ausführung an einen anderen Teil des Programms zu übertragen, wenn wir eine Schleife implementieren wollen.

Betrachten wir nun eine C++-Sprachsyntax und die Implementierung verschiedener Kontrollflussanweisungen wie Schleifen.

Eine der häufigsten Schleifenanweisungen in Programmiersprachen sind for- und while-Schleifen. Die for-Schleife hat den Kopfteil, der dreiteilige Anweisungen enthält und die Ausführung des Schleifenkörpers steuert. Mehrere for-Schleifenanweisungen können ineinander verschachtelt werden und bilden so ein nützliches Konstrukt für viele Programmieraufgaben.

Dieser Artikel zeigt ein Beispiel für die Initialisierung einer zweidimensionalen Matrix mit verschachtelten for-Schleifen. Jede Ebene der verschachtelten Schleife behandelt eine einzelne Zeile der Matrix, daher haben wir in diesem Beispiel zwei Ebenen. Beachten Sie, dass wir die Elemente auch ausgeben, nachdem die zufällige ganze Zahl der angegebenen Position zugewiesen wurde. Der letztere Schritt wird in realen Szenarien separat durchgeführt, aber dieses Codebeispiel dient nur zu Bildungszwecken.

#include <iomanip>
#include <iostream>

using std::cout;
using std::endl;
using std::setw;

constexpr int ROW = 4;
constexpr int COL = 3;

int main() {
  int *matrix = new int[ROW * COL];

  for (int i = 0; i < ROW; ++i) {
    for (int j = 0; j < COL; ++j) {
      matrix[j * ROW + i] = rand() % 100;
      cout << setw(2) << matrix[j * ROW + i] << "; ";
    }
    cout << endl;
  }

  delete[] matrix;

  return EXIT_SUCCESS;
}

Ausgabe:

83; 86; 77;
36; 93; 35;
86; 92; 14;
22; 62; 27;

Verschachtelte while-Schleife zur Initialisierung einer zweidimensionalen Matrix in C++ verwenden

Alternativ können wir den vorherigen Code mit verschachtelten while-Schleifenanweisungen implementieren. In dieser Variante müssen wir die Indexvariablen i und j ausserhalb des Rumpfes while deklarieren und nur eine davon im gleichen Gültigkeitsbereich initialisieren.

Beachten Sie, dass die zweite Variable y, die der Spaltenposition der Matrix entspricht, in jedem Zyklus der äußeren while-Schleife auf 0 initialisiert wird. Dadurch wird sichergestellt, dass die innere Schleife nach der Verarbeitung der ersten Zeile ausgeführt wird. Wir sollten auch inkrementierende Anweisungen für jede Indexvariable in entsprechenden Schleifenbereichen platzieren, da das while selbst nur den bedingten Header hat, der die Iteration steuert.

#include <iomanip>
#include <iostream>

using std::cout;
using std::endl;
using std::setw;

constexpr int ROW = 4;
constexpr int COL = 3;

int main() {
  int *matrix = new int[ROW * COL];

  int j, i = 0;
  while (i < ROW) {
    j = 0;
    while (j < COL) {
      matrix[j * ROW + i] = rand() % 100;
      cout << setw(2) << matrix[j * ROW + i] << "; ";
      j++;
    }
    i++;
    cout << endl;
  }

  delete[] matrix;

  return EXIT_SUCCESS;
}

Ausgabe:

83; 86; 77;
36; 93; 35;
86; 92; 14;
22; 62; 27;

Verschachtelte do...while-Schleife zur Initialisierung einer zweidimensionalen Matrix in C++ verwenden

Auf der anderen Seite hat die Sprache C++ auch das Schleifenkonstrukt do...while, das für spezielle Iterationsfälle geeignet ist, aber wir können damit denselben Codeschnipsel umschreiben.

Die Anweisung do...while führt immer die erste Iteration aus. Dieses Beispiel leidet also nicht unter dieser Eigenschaft, da wir davon ausgehen, dass die generierte Matrix mindestens 1x1-Dimensionen hat.

Die Schleifenstruktur do...while ist fast die gleiche wie im obigen Beispiel für while, da diese beiden ein ähnliches Header-Format haben, das nur bedingte Ausdrücke enthält.

#include <iomanip>
#include <iostream>

using std::cout;
using std::endl;
using std::setw;

constexpr int ROW = 4;
constexpr int COL = 3;

int main() {
  int *matrix = new int[ROW * COL];

  int j, i = 0;
  do {
    j = 0;
    do {
      matrix[j * ROW + i] = rand() % 100;
      cout << setw(2) << matrix[j * ROW + i] << "; ";
      j++;
    } while (j < COL);
    i++;
    cout << endl;
  } while (i < ROW);

  delete[] matrix;

  return EXIT_SUCCESS;
}

Ausgabe:

83; 86; 77;
36; 93; 35;
86; 92; 14;
22; 62; 27;
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Verwandter Artikel - C++ Loop