배열은 같은 데이터 타입의 값들을 일렬로 나열한 것 이다.
각 항목은 배열의 위치로 구분된다.
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';
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를 사용해야 한다.
'전문가를 위한 C++정리' 카테고리의 다른 글
1. C++와 STL 부딪혀보기 1.1 C++ 언어의 기초 1.1.11 함수 (0) | 2024.01.08 |
---|---|
1. C++와 STL 부딪혀보기 1.1 C++ 언어의 기초 1.1.10 루프 (0) | 2024.01.08 |
1. C++와 STL 부딪혀보기 1.1 C++ 언어의 기초 1.1.8 논리 산출 연산자 (0) | 2024.01.05 |
1. C++와 STL 부딪혀보기 1.1 C++ 언어의 기초 1.1.7 조건문 (0) | 2024.01.05 |
1. C++와 STL 부딪혀보기 1.1 C++ 언어의 기초 1.1.6 데이터 타입 (0) | 2024.01.04 |