코딩 테스트를 위한 자료 구조와 알고리즘 with C++
C-style 배열의 문제점
- 메모리 할당, 해제를 수동으로 처리해야 한다.
- 배열 범위 밖의 원소를 참조하는 것을 검사하지 못한다.
- 깊은 복사를 제공하지 않는다.
std::array
- 메모리를 자동으로 할당하고 해제한다.
- array.at(int index) 함수를 이용해 범위 밖 원소 참조에 대한 예외 처리가 가능하다.
- 배열의 크기가 같은 경우 깊은 복사, 깊은 비교를 지원한다.
#include <iostream>
#include <array>
using namespace std;
template <typename T, size_t N>
void print(const array<T, N>& arr)
{
for (T e : arr)
cout << e << ' ';
cout << endl;
}
void main()
{
array<int, 10> arr1;
array<int, 4> arr2 = {0, 1, 2, 3};
try
{
// [] 대신 at을 통해 범위 검사
arr1[0] = arr2.at(4);
}
catch (const out_of_range& ex)
{
cerr << ex.what() << endl;
}
print(arr2);
// 첫 번째 원소의 참조
arr2.front() = 6;
// 마지막 원소의 참조
arr2.back() = 3;
// 배열의 시작 주소
cout << arr2.data() << endl;
array<float, 5> arr3;
array<float, 5> arr4 = {0.1, 0.2, 0.3, 0.4, 0.5};
array<float, 5> arr5 = {0.1, 0.2, 0.3, 0.4, 0.5};
arr3 = arr4;
// 모든 원소가 큰지 확인
cout << boolalpha << (arr3 < arr5) << endl;
// 모든 원소가 같은지 확인
cout << boolalpha << (arr3 == arr5) << endl;
}
출력
array::at: __n (which is 4) >= _Nm (which is 4)
0 1 2 3
0x7ffdf506d790
false
true
'자료구조 & 알고리즘 > 코딩 테스트를 위한 자료 구조와 알고리즘 with C++' 카테고리의 다른 글
std::forward_list (0) | 2023.01.24 |
---|---|
std::vector (0) | 2023.01.23 |
동적 크기 배열 구현 (0) | 2023.01.21 |
연결 리스트 (0) | 2023.01.19 |
정적 배열과 동적 배열 (0) | 2023.01.19 |