본문 바로가기
C++/C++노트

(C++) Array

by Glory_Choi 2022. 8. 2.
반응형

std::array

std::array는 고정된 크기의 배열을 담고 있는 컨테이너입니다.

이 컨테이너는 마치 C언어에서의 배열인 T[N]과 비슷하게 작동하고 배열과 같이{}를 통해 초기화를 할 수 있습니다.

다만 한 가지 차이점은 C배열과는 다르게 배열의 이름이 T*로 자동 형변환 되지 않는다는 차이점이 있습니다.

std::array를 통해서 기존의 C 배열과 같은 형태를 유지하면서 (오버헤드가 없습니다), C++ 에서 추가된 반복자라던지, 대입 연산자 등을 사용할 수 있습니다.(또한 algorithm헤더파일에 정의된 함수 등을 사용할 수 있다는 장점도 있습니다,)

 

생성자

std::array는 Aggregate 타입이기 때문에 aggregate 초기화 방식으로 사용합니다.

하나 하나 대입하며 초기화를 할 수 있지만 일반적으로 arr2와 같이 초기화 한 후에 사용합니다.

 

 

소멸자

배열 소멸시에 모든 원소들의 소멸자를 호출합니다

 

 

맴버 접근

operator[ ]

std::array는 C 스타일 배열과 똑같은 방식으로 배열 원소에 접근할 수 있는 []연산자를 제공합니다.

[]연산자에 접근하고자 하는 배열 원소 인덱스(index)를 지정할 경우, 빠른 동작을 위해 전달된 인덱스 값이 배열의 크기보다 작은지를 검사하지는 않습니다.

 

at

at 함수는 인자로 전달된 index 값이 유효하지 않으면 std::out_of_range 예외(exception)를 발생시킵니다. 그러므로 at() 함수가 [] 연산자보다 조금 느린 편이지만, at() 함수를 잘 이용하면 예외를 적절하게 처리할 수 있습니다.

front, back, data

front는 첫번째 원소를 반환합니다. 때문에 arr의 첫번째 원소인 1이 출력됩니다.

back는 마지막 원소를 반환합니다. 때문에 arr의 마지막 원소인 0이 출력됩니다.

data는 포인터를 반환합니다. arr.data()가 첫번째 원소를 가리키는 포인터이고 +1을 하게 되면 두번째 원소를 가리키기 때문에 *(arr.data()+1)을 하면 두번째 원소를 참조하게 됩니다.

 

반복자

begin, cbegin

시작점을 나타내는 반복자를 리턴합니다. cbegin의 경우 상수 반복자를 리턴합니다.

end, cend

끝을 나타내는 반복자를 리턴합니다. 보통 end()의 경우 맨 마지막 원소 바로 다음을 나타냅니다.

rbegin, rcbegin

역 참조 반복자의 시작점을 리턴합니다. 역참조시에 보통 맨 마지막 원소를 나타내게 됩니다.

rend, rcend

역 참조 반복자의 끝점 리턴합니다.

 

크기

empty

크기가 0인지를 확인합니다. 크기가 0이면 true 0이 아니면 false를 반환합니다.

size

크기가 몇인지 확인합니다. 원소의 개수(N)을 리턴합니다.

유용한 작업

fill

배열의 원소들을 인자로 전달된 값으로 채웁니다.

swap

두 배열의 내용을 바꿉니다.

반응형

'C++ > C++노트' 카테고리의 다른 글

[C++] const 정리  (0) 2023.03.07
C++ 토큰 (Tokens)  (0) 2022.07.21
[C++] sort <algorithm> 사용법 정리  (0) 2022.07.18
카운팅 정렬(Counting Sort)  (0) 2022.07.08
범위 지정 연산자 ::  (0) 2022.07.04