영벨롭 개발 일지

[C++]std::array 클래스 사용법 본문

Programming Language/C & C++

[C++]std::array 클래스 사용법

영벨롭 2022. 3. 29. 15:28

std::array 는 원소의 타입과 배열 크기를 매개변수로 사용하는 클래스 템플릿입니다. 

 

고정된 길이의 배열을 표현할 때 쓰이며 메모리를 자동으로 할당하고 해제합니다. 

 

 

1. 헤더파일

 

#include<array>

 

 

2. 선언

 

array<원소의 type, 배열 크기> arr;

 

array<int, 10> arr1;  //int 타입의 크기가 10인 배열 선언
array<double, 5> arr2;  //double 타입의 크기가 6인 배열 선언
array<int, 3> arr3 = {1, 2, 3};  //int 타입의 크기가 3인 배열 선언 및 초기화

 

 

3. 원소 접근 

 

 (1) arr.at(index)

 

 배열의 index 번째 원소를 반환합니다.  

 

 at() 함수를 사용하면 인자로 전달된 index 값이 유효한지 예외 검사를 합니다. 

 

 예외 검사를 하기 때문에 [ ] 보다는 느립니다. 

 

 

 (2) arr[index]

 

 배열의 index 번째 원소를 반환합니다.  

 

 [ ] 연산자를 사용하면 예외 검사는 하지 않지만, at() 보다는 연산이 빠릅니다.

 

 

 (3) arr.front()

 

 배열의 맨 앞 원소를 반환합니다. 

 

 

 (4) arr.back()

 

 배열의 맨 뒤 원소를 반환합니다. 

 

 

 (5) arr.data()

 

 배열을 포인터 타입으로 반환합니다. 즉 배열의 첫 번째 원소의 주소를 반환합니다. 

 

 

array<int, 4> arr = {1, 2, 3, 4};

cout << arr.at(3) << endl;  //4
cout << arr[3] << endl;     //4
cout << arr.at(4) << endl;  //out_of_range 예외 발생
cout << arr.front() << endl;  //1
cout << arr.back() << endl;   //4
cout << *(arr.data() + 1) << endl;  //2

 

 

 

4. 반복자 

 

 반복자를 사용하면 소스 코드의 재사용성, 유지 보수, 가독성 측면에서 이점을 얻을 수 있습니다. 

 

 또한 범위 기반 for(range-based for) 문법을 이용하여 원소에 차례대로 접근 할 수 있습니다. 

 

 (1) arr.begin()

 

 begin() 함수는 배열의 첫 번째 원소를 가리키는 반복자를 반환합니다. 

 

 

 (2) arr.end()

 

 end() 함수는 배열의 마지막 원소 다음을 가리키는 반복자를 반환합니다. 

 

 

 (3) arr.cbegin(), arr.cend()

 

 반복자를 const 형태로 반환하여 반복자를 이용하여 원소를 수정할 수 없습니다. 

 

 

 (4) arr.rbegin(), arr.rend() / arr.crbegin(), arr.crend()

 

 배열을 거꾸로 했을 때의 첫 번째 원소와 마지막 다음 위치의 반복자를 반환합니다. 

(cr은 r의 const 버전)

 

array<int, 5> arr = {1, 2, 3, 4, 5};

for(auto element : arr)
{
	cout << element << " ";
}

//1 2 3 4 5


for(auto it = arr.begin(); it != arr.end(); i++)
{
	auto element = (*it);
    cout << elemnet << " ";
}

//1 2 3 4 5

 

 

 

5. 사이즈 

 

 (1) arr.size()

 

 배열의 크기를 반환합니다. 

 

 

 (2) arr.max_size()

 

 배열의 최대 사이즈를 반환합니다. 

 

 

 array 컨테이너는 고정된 길이의 배열을 표현할 때 사용한다고 했죠? 때문에 결과적으로 size()와 max_size()는 같은 값을 반환합니다. 

 

 

 

 

 

6. 그 외 함수들

 

 (1) arr.empty()

 

 배열이 비어있는지 확인합니다. 

 

 비어있다면 true, 그렇지 않다면 false를 반환합니다. 

 

 

 (2) arr.swap(arr2)

 

 배열 arr과 arr2의 원소들을 swap 하는 함수입니다. 

 

 이때 두 배열의 타입과 크기는 동일해야 합니다. 

 

 

 (3) arr.fill(data)

 

 배열의 원소를 data로 모두 채워줍니다. 

 

 

반응형