通过模板获取数组长度

通常在代码中我们需要获取数组长度 一种比较简单的方式是使用 sizeof 操作符 如下:

#define SizeOfArray(arr) (sizeof(arr)/sizeof((arr)[0]))

//这样使用没有问题
int a[10] = {0};
int size = SizeOfArray(a);

但是如果传入的是指针 调用SizeOfArray就会出错或者得到不正确的结果

通常情况下如果传入的是指针指向的数组 我们希望编译器在编译的时候就能提示错误 因此提供下面这个版本 使用了c++的模板 代码如下:

template <typename T, size_t N>
inline int SizeOfArray(T (&arr)[N])
{
    return N;
}

//这样使用 没问题
int a[10] = {0};
int size = SizeOfArray(a);

//这样使用 则会编译错误
int *a = new int[10];
int size = SizeOfArray(a);
时间: 2024-08-27 04:20:12

通过模板获取数组长度的相关文章

c/c++ 获取数组长度

在C/C++中并没有提供直接获取数组长度的函数 c/c++ 获取数组长度其中一种方法是使用sizeof(array) / sizeof(array[0]). 在C语言中习惯上在使用时都把它定义成一个宏,比如: #define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));} 而在C++中则可以使用模板技术定义一个函数,比如: template <class T>int getArrayLen(T&

什么情况下使用break关键字? 什么情况下使用Continue关键字? Java如何声明一个数组?JS如何声明一个数组?如何获取数组长度? 如何遍历数组?

什么情况下使用break关键字?什么情况下使用Continue关键字? Break Break关键用于终止循环. 示例: 1 2 3 4 5 6 for (int i = 0; i < 10; i++) {   if (i == 4) {     break; //终止循环,后面的循环不再执行   }   System.out.println(i); } Continue Continue关键字用于终止本次循环,其它循环继续. 示例: 1 2 3 4 5 6 7 for (int i = 0;

C++获取数组长度!

一.静态数组. 比如 int int_ary[5] ,静态数组在编译的时候就知道了数组长度,这对编译器来说挺好实现的. 用得最多的大概就是sizeof了吧: 1 #define countof_macro(x) (sizeof((x)) / sizeof(x)[0]) 对于C++,可以用模板. 如果将数组作为函数形参的话,它会退化成一个指针,但是引用则不会.使用引用带来的另外一个问题就是,声明参数时必须知道数组长度——我要是知道我还费这劲干啥?解决方法就是使用模板,将数组引用的数组大小声明为模板

C++获取数组长度

1.获取字符数组长度 char a[]="abcdef"; int length1=sizeof(a)/sizeof(a[0]); cout<<"a"<<length1<<endl; length1为7. cout<<"a"<<strlen(a)<<endl; 输出6 注:string不能用strlen函数 2.获取字符串string长度 #include <strin

js获取数组长度,对象成员个数字、符串字数

文章来源:百度文库 Javascript怎么得到数组长度(也就是数组的元素个数)? Javascript怎么获取对象的成员个数? 你肯定想到了array.length!? 那么我们来测试一下下面这个例子. <script type="text/javascript"> var a = []; a[50] = 50; alert(a.length); </script> 请问数组a有多少个元素, 或者换一句话说, 数组a的长度为多少? 你会告诉我长度为1, 但浏览

Java 实例 – 获取数组长度

package array; public class ArrayLength { public static void main(String[] args) { /** * 获取数组的长度 */ int i[] = { 1, -4, 1, -2, 4, 7, 8, 5, 4, -1, 25 }; System.out.println("数组长度是:"+i.length); } } 输出结果为 数组长度是:11 原文地址:https://www.cnblogs.com/zhuxiao

PHP | 获取数组长度的方法

一.获取一维数组的长度 count.sizeof 都可以直接统计一维数组长度. 例如:$arr = Array('0','1','2','3','4');       echo count($arr);    // 输出5 $arr = array('A','B','C');               echo sizeof($arr);   // 输出3 二.获取多维数组的长度 e.count函数有两个参数: 0(或COUNT_NORMAL)为默认,不检测多维数组(数组中的数组); 1(或C

JavaScript 数组 length 属性获取数组长度或设置数组元素的数目

JavaScript 数组 length 属性 JavaScript 数组 length 属性可返回或设置或组中元素的数目,语法如下: array_object.length 利用 length 属性得到元素数目 <script language="JavaScript"> var array_1 = new Array('a',10.5,true); document.write( '数组长度 ' + array_1.length ); </script> 运

lua中获取数组长度问题

lua中获取table长度常用的方法有两种 : 1:table={}   print(#table) 2:arr={}   table.getn(arr) 两者最重要的区别还是存在的,前者 “#” 在下标索引不连续的时候会得到 0.(博主的测试而已,如有异议,请告知下,一起学习)