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 |