Make Unreal REAL.
article thumbnail

 

std::array나 std::vector 등은 컨테이너 내부에 크기를 저장한다.

 

#include <iostream>
#include <vector>
#include <array>

using namespace std;

void func(vector<int> vec)
{
    cout << "func - vec.size(): " << vec.size() << endl << endl;
}

template <size_t N>
void func(array<int, N> arr)
{
    cout << "func - arr.size(): " << arr.size() << endl;
}

void main()
{
    vector<int> vec = {1, 2, 3, 4, 5};
    array<int, 5> arr = {1, 2, 3, 4, 5};
    
    cout << "main - vec.size(): " << vec.size() << endl;
    func(vec);
    
    cout << "main - arr.size(): " << arr.size() << endl;
    func(arr);
}

 

출력

main - vec.size(): 5
func - vec.size(): 5

main - arr.size(): 5
func - arr.size(): 5

 

하지만 컨테이너가 아닌 일반 배열 형식의 크기를 확인할 때는 주의해야 한다.

 

같은 코드 블록 내에서는 컴파일 타임에 크기를 유추할 수 있지만, 다른 함수에 인자로 전달되면 단순히 포인터로 인식하기 때문에 크기를 유추할 수 없다.

 

함수에 배열을 전달할 때는 꼭 크기를 함께 전달해야 한다.

 

#include <iostream>

using namespace std;

void func(int arr[])
{
    cout << "func - arr: " << arr << endl;
    cout << "func - sizeof(arr): " << sizeof(arr) / sizeof(*arr) << endl << endl;
    // 불가능하다.
    // cout << "func - size(arr): " << size(arr) << endl;
}

void func(int arr[], int n)
{
    cout << "func - n: " << n << endl;
}

void main()
{
    int arr[] = {1, 2, 3, 4, 5};

    cout << "main - arr: " << arr << endl;
    cout << "main - sizeof(arr): " << sizeof(arr) / sizeof(*arr) << endl;
    cout << "main - size(arr): " << size(arr) << endl << endl;

    func(arr);

    func(arr, size(arr));
}

 

출력

main - arr: 00CFFD48
main - sizeof(arr): 5
main - size(arr): 5

func - arr: 00CFFD48
func - sizeof(arr): 1

func - n: 5

'C++ > 기타' 카테고리의 다른 글

swap(), iter_swap(), swap_ranges()  (0) 2023.02.18
재사용 가능한(Reusable) 코드 작성  (0) 2023.02.16
디폴트 매개변수(Default Parameter)  (0) 2023.01.30
실수를 비교하는 방법  (0) 2023.01.30
람다 식(Lambda expression)  (0) 2023.01.21
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그