[C++/STL] - Array

YH J·2023년 5월 24일
0

C++ STL

목록 보기
1/11

1. Array란

STL의 Array는 C++에서 기본적으로 제공하는 Array로, 정적으로 선언되며 크기가 고정된 배열입니다. 이 배열은 array 헤더 파일에 정의되어 있습니다.

2. 특징

  • STL의 Array는 정적으로 선언되며 크기가 고정된 배열입니다. 따라서 배열의 크기는 선언 시에 결정되며 변경할 수 없습니다.
  • STL의 Array는 C++ 표준 라이브러리에서 제공되는 STL 컨테이너 중 하나입니다. 따라서 다양한 STL 함수 및 알고리즘을 적용할 수 있습니다.
  • STL의 Array는 일반적인 배열과 마찬가지로 인덱스를 통해 요소에 접근할 수 있습니다.

3. 장단점

장점 :

  • STL의 Array는 기본적으로 제공되므로 추가적인 설치나 설정이 필요하지 않습니다.
  • STL의 Array는 일반적인 배열과 마찬가지로 인덱스를 통해 요소에 접근할 수 있습니다.
  • STL의 Array는 STL의 다른 컨테이너와 마찬가지로 다양한 STL 함수 및 알고리즘을 적용할 수 있습니다.
  • STL의 Array는 크기가 고정되어 있으므로 메모리 관리에 대한 부담이 적습니다.
  • STL의 Array는 C++11부터 사용 가능한 std::array를 통해 C-style array의 단점을 보완할 수 있습니다.

단점 :

  • STL의 Array는 크기가 고정되어 있으므로 배열의 크기를 동적으로 조정할 수 없습니다.
  • STL의 Array는 배열의 요소를 추가하거나 삭제하는 기능이 없습니다.
  • STL의 Array는 C-style array와 마찬가지로 배열의 요소가 메모리의 연속된 공간에 저장되므로 메모리 관리에 대한 부담이 있습니다.

4. 시간복잡도

  1. 접근 - O(1)
    접근은 배열 내에서 n번째 인덱스에 해당하는 값을 찾아내는 연산이다. 배열의 접근은 O(1)의 시간복잡도를 갖는다. 따라서 찾고자 하는 값이 몇 번째 인덱스에 있는지 알고 있다면 굉장히 빠른 검색 속도를 갖는다. 배열의 첫번째 변수에는 시작 주소값이 저장되고, A[n]의 값을 찾아가기 위해 시작 주소값에서 단순 사칙연산이 수행되기 때문이다.
  2. 검색 - O(n)
    배열의 검색은 순차검색이다. 인덱스를 알지 못할 때 원하는 값을 찾기 위해 배열을 하나하나 확인해야한다.
    A[3]의 값을 찾기 위해 A[0], A[1]... 을 순서대로 검색한다. 따라서 최대 O(n)의 시간 복잡도를 가진다.
  3. 삽입 및 삭제 - 인덱스 알고있으면 O(1), 찾아야 하면 O(n)
    추가와 삭제는 먼저 빈 공간이 마련되 있다를 전제로 한다. 추가, 삭제의 시간복잡도는 앞서 말한 접근과 검색의 방법 차이에 따라 시간복잡도가 나뉜다.
    A[6]에 5라는 값을 넣고, 혹은 빼고 싶을 때 해당 인덱스를 정확하게 알고 있다면 접근의 개념으로 O(1)의 시간복잡도를 가지지만 해당 인덱스를 찾아야한다면 검색의 시간복잡도인 O(n)에 해당한다.

5. 사용법

1) 초기화

array<int, 3> arr1 = {1, 2, 3};  //생성과 동시에 초기화
array<double, 6> arr2;  //초기화 하지 않았으므로, 쓰레기값 6개가 들어가 있습니다.
array<int, 10> arr3 = {0};  //10개의 배열 값들이 다 0으로 초기화 됩니다.
array<int, 10> arr4 = {2};  //첫번째 배열 값만 2로 초기화 되고 남은 9개는 0으로 초기화 됩니다.
array<int, 4> array5;
array5 = {1, 2, 3, 4};  //생성 후에 초기화 가능합니다만, 복사가 되는 것이라서 이왕이면 생성과 동시에 초기화 하는것이 성능향상에 좋습니다.

2) 멤버 함수

arr이라는 이름의 array로 가정

  • arr.at(index) : index 번째 인자 반환
  • arr[index] : index 번째 인자 반환
  • arr.front() : 배열의 맨 앞의 원소 반환
  • arr.back() : 배열의 맨 뒤 원소 반환
  • arr.empty() : 배열이 비어있으면 true 반환
  • arr.max_size() : 배열의 최대 사이즈 반환 ( size()와 동일 )
  • arr.size() : 배열의 사이즈를 반환
  • arr.fill(val) : 배열의 인자를 모두 val로 변환
  • arr.swap(arr2) : arr2의 인자와 arr의 인자들을 스왑 ( 타입과 길이가 같아야함 )
  • arr.data() : 배열을 포인터 타입으로 반환 ( 배열의 첫번째 인자의 주소 )
  • arr.begin() : 배열의 맨 첫번째 원소 가리킴 ( iterator )
  • arr.end() : 배열의 맨 마지막 원소의 다음 원소를 가리킴 ( iterator )
  • arr.rbegin() : 배열을 거꾸로 했을 때 첫번째 원소 가리킴 ( iterator )
  • arr.rend() : 배열을 거꾸로 했을 때 마지막의 다음 원소를 가리킴 ( iterator )
  • arr.cbegin(), cend() : begin, end와 같지만 const가 붙어서 수정 불가
  • arr.crbegin(), crend() : 위와 동일
profile
게임 개발자 지망생

0개의 댓글