std::array
선언 및 초기화){
// int가 5개 있는 C++ 스타일 배열 선언
// 내부적으로 정적 배열을 가지고 있다
// 초기화가 안 되어 있으면 쓰레기 값
array<int, 5> arr0;
// 기본값으로 초기화(int의 경우 기본값은 0)
array<int, 5> arr1{};
// arr2[0], arr2[1]의 값만 세팅 되고 나머지 값들은 기본값으로 초기화(int의 경우 기본값은 0)
array<int, 5> arr2{ 0, 1 };
}
array<int, 5> arr0;
는 int
타입의 원소 5개를 가지는 std::array
를 선언합니다. 초기화되지 않으면 쓰레기 값이 들어갑니다.array<int, 5> arr1{};
는 int
타입의 원소 5개를 가지는 std::array
를 기본값(0)으로 초기화합니다.array<int, 5> arr2{ 0, 1 };
는 첫 번째 원소를 0, 두 번째 원소를 1로 초기화하고 나머지는 기본값(0)으로 초기화합니다.std::array
원소 접근){
array<int, 5> arr{ 1, 2, 3 };
cout << arr[0] << endl;
//cout << arr[-1] << endl; // release 빌드 시 예외 발생 안 할 수 있음(정의 되지 않은 행동)
//cout << arr.at(-1) << endl; // 범위 벗어날 때 예외 보장 (std::out_of_range)
}
array<int, 5> arr{ 1, 2, 3 };
는 첫 번째 원소를 1, 두 번째 원소를 2, 세 번째 원소를 3으로 초기화합니다.arr[0]
을 통해 첫 번째 원소에 접근하여 출력합니다.arr[-1]
와 arr.at(-1)
은 범위를 벗어난 접근으로, 첫 번째는 정의되지 않은 동작을 일으킬 수 있으며, 두 번째는 예외(std::out_of_range
)를 발생시킵니다. 주석 처리되어 있습니다.{
// 배열 사이즈 구하기
int arr0[] = { 1, 2, 3 };
cout << sizeof(arr0) / sizeof(int) << endl;
cout << sizeof(arr0) / sizeof(arr0[0]) << endl;
array<int, 3> arr1 = { 1, 2, 3 };
cout << arr1.size() << endl;
}
int arr0[] = { 1, 2, 3 };
는 크기를 자동으로 결정하는 C 스타일 배열입니다.sizeof(arr0) / sizeof(int)
는 배열의 크기를 구합니다. (3)sizeof(arr0) / sizeof(arr0[0])
도 배열의 크기를 구합니다. (3)array<int, 3> arr1 = { 1, 2, 3 };
는 std::array
를 선언하고 초기화합니다.arr1.size()
는 배열의 크기를 구합니다. (3){
// 배열의 가장 앞, 가장 뒤 원소 구하기
array<int, 3> arr{ 1, 2, 3 };
cout << arr[0] << endl;
cout << arr.front() << endl;
cout << arr[arr.size() - 1] << endl;
cout << arr.back() << endl;
}
array<int, 3> arr{ 1, 2, 3 };
는 std::array
를 선언하고 초기화합니다.arr[0]
과 arr.front()
는 첫 번째 원소에 접근하여 출력합니다.arr[arr.size() - 1]
과 arr.back()
은 마지막 원소에 접근하여 출력합니다.{
array<int, 5> arr0{ 1, 2, 3, 4, 5 };
array<int, 5> arr1{ 5, 4, 3, 2, 1 };
// 교환
arr0.swap(arr1);
// 대입 가능
arr0 = arr1;
// 비교 연산들 가능
if (arr0 == arr1)
{
}
if (arr0 > arr1)
{
}
if (arr0 < arr1)
{
}
}
array<int, 5> arr0{ 1, 2, 3, 4, 5 };
와 array<int, 5> arr1{ 5, 4, 3, 2, 1 };
를 선언하고 초기화합니다.arr0.swap(arr1);
를 사용하여 두 배열을 교환합니다.arr0 = arr1;
을 통해 배열을 대입합니다.==
, >
, <
)이 가능합니다.{
array<int, 5> arr{ 1, 2, 3, 4, 5 };
cout << arr.data()[0] << endl; // 내부 정적 배열에 접근
}
array<int, 5> arr{ 1, 2, 3, 4, 5 };
를 선언하고 초기화합니다.arr.data()
를 사용하여 내부 정적 배열에 접근합니다. arr.data()[0]
은 첫 번째 원소를 출력합니다.std::array
는 C++ 표준 라이브러리에서 제공하는 정적 배열 클래스로, C 스타일 배열보다 안전하고 편리합니다. std::array
를 사용하면 배열의 크기와 초기화를 명확히 지정할 수 있으며, 크기를 계산하고, 원소에 접근하고, 배열 간의 교환 및 비교 연산을 수행할 수 있습니다. std::array
는 내부적으로 정적 배열을 사용하므로 성능 손실이 없으며, 범위 검사를 제공하는 at()
메서드를 통해 안전하게 원소에 접근할 수 있습니다. std::array
는 C++11부터 사용할 수 있으며, 현대 C++에서는 배열 사용 시 권장됩니다.