C++中数组可分为堆区的数组和栈区的数组,对于两种数组C++都没有函数可以直接获取数组的元素的个数。
一、堆区的数组
堆区的数组是自己申请的,比如用new申请空间:
int* arr = new int[10];
堆区的数组不能计算出包含元素个数。
二、栈区的数组
栈区的数组是系统自动分配的,如:
int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
栈区的数组可以通过以下两种方法得出元素的个数:
(1)
int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
auto diff = sizeof(arr)/sizeof(int);
(2)
这种方法需要所用编译器支持C++11,14
int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
int *pbeg = begin(arr);
int *pend = end(arr);
auto length = pend - pbeg;//数组元素个数
- #include<iostream>
- using namespace std;
-
- template<class T>
-
- int length(T& arr)
- {
- //cout << sizeof(arr[0]) << endl;
- //cout << sizeof(arr) << endl;
- return sizeof(arr) / sizeof(arr[0]);
- }
-
- int main()
- {
- int arr[] = { 1,5,9,10,9,2 };
- // 方法一
- cout << "数组的长度为:" << length(arr) << endl;
- // 方法二
- //cout << end(arr) << endl;
- //cout << begin(arr) << endl;
- cout << "数组的长度为:" << end(arr)-begin(arr) << endl;
- system("pause");
- return 0;
- }
- 输出结果为:
- 数组的长度为:6
- 数组的长度为:6