C++에서 std::array

gaeguli·2024년 4월 28일

std::array

  • std::array는 c 스타일의 배열의 클래스 버전이라고 생각하면 된다. 그렇기 때문에 컴파일 타임에서 크기를 결정된다. 또한 c스타일의 배열과 같이 연속적으로 스택 영역에 할당된다. 또한 c스타일의 배열보다는 안정적이라고 할 수 있다.

헤데파일

  • C++ 11부터 사용이 가능하다.
  • std::array를 사용하기 위해서는 #include <array>을 삽입해야 이용 가능하다.

템플릿 선언

template<typename T, size_t N> class array
  • 첫번째 파라미터는 배열의 데이터 타입을 받게 된다.
  • 두번째 파라미터는 인자의 개수를 받는다. std::array는 컴파일 타임에서 크기가 결정되기 때문에 크기를 정해줘야한다.

장점:

  • 객체와 데이터 사이의 간접 참조가 없어 빠를 수가 있다.
  • 메모리 해제를 하지 않기 때문에 메모리 누수와 같은 문제가 없다.

단점:

  • 메모리 크기가 컴파일 타임에서 결정되기 때문에 이후에 크기를 변경할 수 없다.
  • 스택 영역에 저장되기 때문에 최대 메모리 공간에 제약을 받는다.

사용법

std::array<자료형, 크기> 이름;

std::array<int, 3> arr1 = {1, 2, 3}; // 생성과 동시에 초기화
std::array<int, 3> arr2 = {0}; // 모든 값을 0으로 초기화
  • std::array는 대입 연산자를 사용 가능하다.
std::array<int, 3> arr1 = {1, 2, 3}; 
std::array<int, 3> arr2; // 초기화를 하지 않아 쓰레기값이 들어감
arr2 = arr1;

std::array 멤버함수

std::array<int, 3> arr = {1, 2, 3}; 으로 선언한다고 생각한다.

멤버함수 사용멤버함수 설명
arr.begin()배열의 맨 첫번째 원소를 가르킨다.(iterator와 사용)
arr.rbegin()배열을 거꾸로 했을 때 첫번째 원소를 가르킨다.(iterator와 사용)
arr.end()배열의 맨 마지막 다음 원소를 가르킨다.(iterator와 사용)
arr.rend()배열을 거꾸로 했을 때 다음 원소를 가르킨다.
arr.cbegin(), cend()const를 붙여 iterator를 이용해서 원소를 수정할 수 없다.
arr.crbegin(), crend()위의 내용과 동일하다.
arr.front()배열의 맨 앞의 원소를 반환한다.
arr.back()배열의 맨 뒤 원소를 반환한다.
arr.data()배열을 포인터 타입으로 변환한다. (배열의 첫번째 주소를 반환함)
arr.fill(num)배열의 인자를 모두 num으로 변경한다.
arr.swap(arr2)arr2의 배열 인자와 arr의 배열 인자들을 순서대로 바꾼다.
arr.at(n)n번째 인자를 반환한다.
arr[n]n번째 인자를 반환한다. (.at()과 다르게 컴파일 타임에서 범위를 벗어난 값을 확인하지 않는다.
arr.empty()배열이 비어있는지 확인한다.
arr.max_size()배열의 최대 사이즈를 반환한다. (.size()와 같음)
arr.size()배열의 사이즈를 반환한다. (.max_size()와 같음)

std::array 값들 출력

void print(std::array<int, 5> arr) {
	for (auto ele : arr)
    	std::cout << ele << ' ';
 }
profile
개발하는 개구리

0개의 댓글