프로그래밍 공부
작성일
2024. 1. 5. 14:28
작성자
WDmil
728x90

배열은 같은 데이터 타입의 값들을 일렬로 나열한 것 이다.

 

각 항목은 배열의 위치로 구분된다.

 

C++에서 배열을 선언할 때는 배열의 크기를 명시적으로 설정해야 한다.

 

배열의 크기로 값이 변할 수 있는 변수를 줄 수는 없다.

 

배열의 크기는 상수여야 한다. 또는 상수 표현식(constant expression)[constexpr]을 배열 크기 선언에 이용할 수 있다.

 

int myArray[3];
myArray[0] = 0;
myArray[1] = 0;
myArray[2] = 0;

 

위와같이 3개의 정수값을 담는 배열을 선언하고, 배열의 항목을 모두 0으로 초기화한다.

 

이러한 초기화 방식은 다른 방법이 있는데, 반복문을 사용해서 초기화 할 수있고, 또는 초기화 매커니즘을 사용해서 초기화 할 수 있다.

int myArray[3] = {0};

int myArray2[3];
for(int i = 0; i < 3; i++)
    myArray2[i] = 0;

 

이러한 방식의 초기화에는 0을 이용해 초기화하지 않아도된다.

 

초기화 리스트를 통해 배열을 초기화 할 수도 있다. 이떄는 커파일러가 자동으로 배열의 크기를 연역하여 지정해준다.

 

다음과 같이 지정해줄 수 있다.

int arr[] = {1, 2, 3, 4}; // 컴파일러가 크기 4인 배열을 생성한다.

1차원 배열을 선언하되, 나열된 각각의 정수값이 배열 항목 번호와 대응되게 생성된다고 할 수 있다.

 

C++에서는 다차원 배열도 선언할 수 있는데, 예를들어 Tic-Tac-Toe 게임보드를 2차원 배열로 생성한다면, 각 배열 항목을 가리키는 두 값은 보드의 x, y 좌표로 이해할 수 있다.

 

3차원 이상의 배열은 그림으로 그리기 어렵고, 이해도 어렵기 때문에 실제로 많이 사용되지는 않는다.

char ticTacToeBoard[3][3];
tiacTacToeBoard[1][1] = '0';

 

배열의 첫값은 언제나 1이 아니라 0임을 기억해야한다. 마지막 항목위치도, 배열크기 -1이다.

 

std::array

 

위에서 확인한 배열 타입은 C언어에서 유래한 것 임으로, C++에서도 계속 사용할 수 있고 사용되고도 있다.

 

C++에서는 std::array라는 새로운 형태의 컨테이너를 주로 사용한다. std::array는 <array>헤더 파일에 정의되어 있으며,    C언어의 배열을 대체하는 안전한( 범위를 벗어날 일이 없는) 배열 타입이다. std::array가 없을 때 에는 std::vector를 사용해야 했다.

 

std::array는 std;:vector와 다르게 크기가 고정되어있어서, 새로 항목을 추가하거나 삭제할 수는 없지만. 오버헤드가 적다는 장점이 있다.

 

std::array는 기존 C 배열에 대한 아주 가벼운 래퍼 클래스로, 기존 C배열에 비해 몃가지 장점이 있다.

 

  • 배열의 크기를 항상 정확하게 알 수 있다.
  • 포인터가 자동으로 잘못 타입 캐스팅 되는것을 피할 수 있다.
  • C++의 STL의 반복자(iterator)를 활용하여 항목을 순회하거나, STL알고리즘 을 이용할 수 있다.

 

std::array의 사용에는 두개의 파라미터가 필요하다. 하나는 저장할 항목의 타입이고, 다른 하나는 배열의 크기이다.

#include <iostream>
#include <array> 
using namespace std;
int main()
{
    array<int, 3〉 arr = {9, 8, 7};
    cout « "Array size = " « arr.size() « endl;
    cout « "Element 2 = " « arr[1] « endl;
    return 0;
}

런타임시 크기가 고정된다. 크기를 키우거나 줄일 수 없다.

 

만약, 크기를 동적으로 바꾸어야 한다면, std::vector를 사용해야 한다.

728x90