C++의 중첩 루프

Jinku Hu 2023년10월12일
  1. 중첩 for 루프를 사용하여 C++에서 2차원 행렬 초기화
  2. 중첩 while 루프를 사용하여 C++에서 2차원 행렬 초기화
  3. 중첩 do...while 루프를 사용하여 C++에서 2차원 행렬 초기화
C++의 중첩 루프

이 기사에서는 C++에서 다양한 중첩 루프를 활용하는 방법을 설명합니다.

중첩 for 루프를 사용하여 C++에서 2차원 행렬 초기화

루프는 일반적으로 프로그램 카운터를 수정하고 실행 중인 CPU가 프로그램의 다른(일반적으로 비순차적) 명령어로 이동하도록 하는 제어 흐름 문으로 알려져 있습니다. 프로그램 카운터는 실행 중인 프로그램의 다음 명령어를 저장하는 CPU 코어의 레지스터입니다.

각 명령문이 단일 기계 명령에 해당하는 프로그램의 어셈블리 언어 수준 표현 측면에서 생각해 봅시다. 코드는 순차적으로 실행되고 달리 지시되지 않는 한 CPU는 다음 명령을 가져옵니다(대단히 말해서 최신 CPU 코어는 여러 명령을 가져올 수 있고 종종 프로그램의 비순차적 위치에서 가져올 수 있는 대규모로 최적화된 기계이기 때문입니다). 따라서 루프를 구현하려면 프로그램의 다른 부분으로 실행을 전송하기 위한 특수 명령을 어셈블리 언어로 표시해야 합니다.

이제 C++ 언어 구문과 루프와 같은 다양한 제어 흐름 문을 구현하는 방법을 살펴보겠습니다.

프로그래밍 언어에서 가장 일반적인 루프 문 중 하나는 forwhile 루프입니다. for 루프에는 세 부분으로 구성된 문을 포함하고 루프 본문의 실행을 제어하는 ​​헤더 부분이 있습니다. 여러 for 루프 문은 서로 중첩되어 많은 프로그래밍 작업에 유용한 구조를 형성할 수 있습니다.

이 기사는 중첩 for 루프를 사용하여 2차원 행렬을 초기화하는 예를 보여줍니다. 각 중첩 루프 수준은 행렬의 단일 행을 처리하므로 이 예에서는 두 개의 수준이 있습니다. 임의의 정수가 주어진 위치에 할당된 후에도 요소를 인쇄한다는 점에 유의하십시오. 후자의 단계는 실제 시나리오에서 별도로 수행되지만 이 코드 샘플은 교육 목적으로만 사용됩니다.

#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;
}

출력:

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

중첩 while 루프를 사용하여 C++에서 2차원 행렬 초기화

또는 중첩된 while 루프 문을 사용하여 이전 코드를 구현할 수 있습니다. 이 변형에서는 while 본문 외부에 인덱스 변수 ij를 선언하고 동일한 범위에서 그 중 하나만 초기화해야 합니다.

행렬의 열 위치에 해당하는 두 번째 변수 y는 외부 while 루프의 각 주기 0으로 초기화됩니다. 이렇게 하면 첫 번째 행을 처리한 후 내부 루프가 실행됩니다. while 자체에는 반복을 제어하는 ​​조건부 헤더만 있으므로 각 루프 범위에 각 인덱스 변수에 대한 증분 명령문을 배치해야 합니다.

#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;
}

출력:

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

중첩 do...while 루프를 사용하여 C++에서 2차원 행렬 초기화

반면에 C++ 언어에는 특별한 경우의 반복에 적합한 do...while 루프 구조도 있지만 이를 사용하여 동일한 코드 조각을 다시 작성할 수 있습니다.

do...while 문은 항상 첫 번째 반복을 실행합니다. 따라서 이 예제는 생성된 행렬이 최소 1x1 차원을 갖는다고 가정하므로 이 기능으로 인해 문제가 발생하지 않습니다.

do...while 루프 구조는 위의 while 예제와 거의 동일합니다. 이 둘은 조건식만 포함하는 유사한 헤더 형식을 갖기 때문입니다.

#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;
}

출력:

83; 86; 77;
36; 93; 35;
86; 92; 14;
22; 62; 27;
작가: 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

관련 문장 - C++ Loop