C++ 배열

4014 단어 cpp
배열을 사용하면 단일 변수를 생성하여 연속 메모리 공간에 여러 값을 저장할 수 있습니다. C++에서는 배열이 보유할 데이터 유형을 선언해야 하며 단일 배열에서 데이터 유형을 혼합할 수 없습니다.

선언, 초기화 및 조작


int numbers[10];는 10개의 정수를 저장할 수 있는 numbers라는 배열을 선언합니다.

배열 인덱스는 0에서 시작하므로 첫 번째 값은 numbers[0]에 있고 마지막 값은 numbers[9]에 있습니다.

배열을 초기화하려면 중괄호 사이에 값을 나열합니다.
int numbers[] = { 9, 3, 4, 0, 1 };
선언하는 동안 초기화할 때 배열의 크기를 지정할 필요가 없습니다. 더 큰 배열을 원하고 일부 값만 초기화하려는 경우 크기를 포함할 수 있습니다.
int numbers[10] = { 9, 3, 4, 0, 1 };는 지정된 값으로 숫자[0]에서 숫자[4]를 초기화하고 나머지는 0으로 초기화합니다.

int numbers[10] = { 9, 3, 4, 0, 1 };

for (int i = 0; i < 10; i++)
  std::cout << i << ": " << numbers[i] << std::endl;

// output
0: 9
1: 3
2: 4
3: 0
4: 1
5: 0
6: 0
7: 0
8: 0
9: 0


나머지 인덱스에 값을 할당할 수 있습니다.

numbers[5] = 8;
numbers[6] = 2;


이전에 설정한 값을 변경할 수도 있습니다.

numbers[0] = 47;

// output
0: 47
1: 3
2: 4
3: 0
4: 1
5: 8
6: 2
7: 0
8: 0
9: 0


출입 금지 구역의



값을 음수이거나 배열 크기 - 1(이 예에서는 숫자[10])을 초과하는 인덱스로 설정하려고 하면 범위를 벗어납니다. C++는 인덱스가 범위 내에 있는지 확인하지 않으므로 의도하지 않은 데이터에 액세스하고 변경할 수 있습니다. 프로그램을 중지시키는 보호된 메모리에 액세스할 수도 있습니다. 배열 인덱스가 범위를 벗어나면 일부 컴파일러는 오류 메시지와 함께 종료될 수 있습니다.

배열을 함수에 매개변수로 전달하기



배열은 참조로 함수에 전달되므로 함수 내에서 값을 변경하면 배열의 실제 값이 변경됩니다.

void doubleValues(int arr[], int size)
{
  for (int i = 0; i < size; i++)
    arr[i] = arr[i] * 2;
}

void printValues(int arr[], int size)
{
  for (int i = 0; i < size; i++)
    std::cout << i << ": " << arr[i] << std::endl;

  std::cout << std::endl;
}

int main() {
  int numbers[] = { 1, 2, 3, 4, 5 };


  printValues(numbers, 5);
  doubleValues(numbers, 5);
  printValues(numbers, 5);

  return 0;
}

// output
0: 1
1: 2
2: 3
3: 4
4: 5

0: 2
1: 4
2: 6
3: 8
4: 10


예약어const를 사용하여 함수가 배열 매개변수의 값을 변경하는 것을 방지할 수 있습니다. 함수에서 배열을 수정하지 않으려면 항상 배열을 상수 형식 매개변수로 선언해야 합니다.

void doubleValues(const int arr[], int size)
{
  // ...
}


다차원 배열



2차원(2D) 배열은 행과 열로 배열된 데이터를 포함합니다.
int grid[5][4]; 5개의 행과 4개의 열이 있는 2D 정수 배열을 선언합니다.

    0     1     2     3
0 [ 0 ] [ 0 ] [ 0 ] [ 0 ]
1 [ 0 ] [ 0 ] [ 0 ] [ 0 ]
2 [ 0 ] [ 0 ] [ 0 ] [ 0 ]
3 [ 0 ] [ 0 ] [ 0 ] [ 0 ]
4 [ 0 ] [ 0 ] [ 0 ] [ 0 ]


2D 배열의 구성 요소에 액세스하려면 행의 인덱스 다음에 액세스하려는 값의 열 인덱스를 사용합니다.

grid[2][1] = 9;

for (int i = 0; i < 5; i++)
{
  std::cout << i << " ";

  for(int j = 0; j < 4; j++)
    std::cout << "[ " << grid[i][j] << " ]" << " ";

  std::cout << "\n";
}

// output
0 [ 0 ] [ 0 ] [ 0 ] [ 0 ]
1 [ 0 ] [ 0 ] [ 0 ] [ 0 ]
2 [ 0 ] [ 9 ] [ 0 ] [ 0 ]
3 [ 0 ] [ 0 ] [ 0 ] [ 0 ]
4 [ 0 ] [ 0 ] [ 0 ] [ 0 ]


위의 예에서 중첩 루프를 사용하여 행과 열을 반복할 수 있음을 볼 수도 있습니다. 여기서 i는 행을 나타내고 j는 열을 나타냅니다.

2D 배열은 1차원 배열과 유사하게 선언 중에 초기화할 수도 있습니다. 외부 중괄호의 각 인덱스는 열을 나타내며 행을 나타내는 중괄호 내부의 값 집합을 포함합니다.

int grid[3][3] = {
  {1, 2, 3},
  {4, 5, 6},
  {7, 8 , 9}
};

  std::cout << "    0     1     2";
  std::cout << std::endl;

  for (int i = 0; i < 3; i++)
  {
    std::cout << i << " ";

    for(int j = 0; j < 3; j++)
      std::cout << "[ " << grid[i][j] << " ]" << " ";

    std::cout << "\n";
  }



추가 읽을거리/참고문헌


  • C++ 프로그래밍: 데이터 구조를 포함한 프로그램 설계 8판. D.S. Malik
  • 좋은 웹페이지 즐겨찾기