[C++] 배열의 길이 구하는 방법

지즈·2024년 12월 24일
0

C++

목록 보기
2/5

C++에서 가장 일반적으로 사용되는 배열인 [ 정적 배열, STL 벡터, STL 배열 ]의 길이 구하는 방법에 대해 알아보겠다.

1. 정적 배열 - sizeof()

컴파일 시 크기가 고정되는 배열이다.

#include <iostream>
using namespace std;

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    size_t length = sizeof(arr) / sizeof(arr[0]);
    cout << "배열 길이: " << length << endl;
    return 0;
}

*sizeof() 연산자란?

데이터 타입이나 객체의 메모리 크기를 Byte 단위로 반환하는 연산자(Operator)다. size_t 타입을 반환한다. 연산자이므로 컴파일 타임에 처리된다.

*size_t란?

C++에서 배열의 크기메모리의 크기를 표현할 때 사용되는 Unsigned 정수형 타입이다. 사용 시 [ int ] 보다 훨 있어 보인다. stddef.h 또는 cstdef 헤더 파일에 정의되어 있다.

*sizeof(arr) / sizeof(arr[0])인 이유?

arr은 배열의 변수명이지만 동시에 배열의 전체를 나타내므로, 배열이 메모리에 할당된 실제 크기를 반환한다. arr[0]은 배열의 첫 번째 요소의 크기를 반환한다. 즉, 정수형 원소가 5개인 배열은 메모리에 실제로 20byte가 할당돼있고, 첫 번째 원소인 정수형의 크기인 4byte로 나눠 5개임을 도출해낸다.


2. STL 벡터 - size()

벡터는 크기가 동적으로 변경 가능한 배열이다. size() 멤버 함수를 사용하여 길이를 구한다.

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> vec = {1, 2, 3, 4, 5};
    cout << "벡터 길이: " << vec.size() << endl;
    return 0;
}

*vector는 class다

데이터를 저장/관리하는 클래스로, 멤버 함수를 제공한다.

*vector는 동적이다

선언 시에 지정한 크기만큼만 메모리에 할당되고, 추가로 필요할 때마다 2배씩 증가한다.


3. STL 배열

C++ 11 이상부터 사용 가능하며, 정적 배열처럼 고정 크기를 가진다. size() 멤버 함수를 제공하여 쉽게 배열 길이를 얻을 수 있다.

#include <iostream>
#include <array>
using namespace std;

int main() {
    array<int, 5> arr = {1, 2, 3, 4, 5};
    cout << "std::array 길이: " << arr.size() << endl;
    return 0;
}

*배열과 STL 배열의 차이점

일반 배열은 범위 체크 기능이 없고 배열 크기 정보를 따로 관리해야 하는 등 제한적이다. STL 배열은 범위 체크, 이터레이터 등 더 편리한 기능을 많이 갖고 있다.

profile
클라이언트 개발자가 되는 그 날까지 킵 고잉

0개의 댓글