std::array
C++ std namespace에 속하는 array와 유사한 기능을 제공하는 클래스다. 기존의 배열을 래핑했다고 볼 수 있다.
#include <array>
using namespace std;
int main()
{
array<int, 5> my_arr = { 1, 2, 3, 4, 5 };
return 0;
}
기존 배열과의 차이점
기존 배열에서는 배열의 크기를 벗어나는 인덱스의 접근에 대해서 접근을 허용했지만 std::array는 예외를 발생시킨다. 아래와 같은 경우 쓰레기 값을 출력한다.
using namespace std;
int main()
{
int arr[5] = { 0 };
cout << arr[10] << endl;
return 0;
}

std::array에서 범위를 벗어나는 값을 출력하려고 하면 예외가 발생한다.
using namespace std;
int main()
{
array<int, 5> my_arr = { 1, 2, 3, 4, 5 };
cout << my_arr[10] << endl;
return 0;
}

몇 가지 유용한 기능
- size()
array의 크기를 출력한다.
array<int, 5> my_arr = { 1, 2, 3, 4, 5 };
cout << my_arr.size() << endl;
- sort()
std에 정의된 sort 함수와 array를 함께 사용하면 보다 편하게 정렬이 가능하다.
int main()
{
array<int, 5> my_arr = { 1, 21, 3, 47, 5 };
for (auto &element : my_arr)
{
cout << element << " ";
}
cout << endl;
sort(my_arr.begin(), my_arr.end());
for (auto &element : my_arr)
{
cout << element << " ";
}
return 0;
}

내림차순으로 정렬하기 위해서는 rbegin(), rend()를 사용한다.
sort(my_arr.rbegin(), my_arr.rend());
for (auto &element : my_arr)
{
cout << element << " ";
}

std::array를 함수의 인자로 전달
std::array 자체를 함수 인자로 전달해도 정상적으로 동작한다. 다만 함수를 호출할때 array 전체가 복사되기 때문에 성능상의 문제가 발생할 수 있다.
using namespace std;
// std::array 전체를 함수 인자로 전달
void doSome(array<int , 5> arr)
{
cout << arr.size() << endl;
}
이럴 경우 array를 참조로 전달하면 전체가 복사되는 비효율적인 상황을 방지할 수 있다.
using namespace std;
void doSome(const array<int , 5> &arr)
{
cout << arr.size() << endl;
}'C++ 학습' 카테고리의 다른 글
| [C++] call by value (0) | 2023.11.24 |
|---|---|
| [C++] std::vector (0) | 2023.11.24 |
| [C++] 다중 포인터 (0) | 2023.11.23 |
| [C++] void pointer (0) | 2023.11.23 |
| [C++] for each (0) | 2023.11.23 |