一、问题
①在leetcode中使用sizeof计算数组长度执行不通过,在自己vs中可以
②在leetcode中使用nums.size()计算数组长度执行通过,在自己vs不可以
③使用题目提示的n = length编译不通过,在自己vs也不可以
二、原因
leetcode使用的是容器形参,我自己vs定义没有使用容器vector,而是使用数组
①sizeof用来计算基本数据类型,如:
int arr[5]; char arr2[] = "asdfg"; char arr3[100] = "asdfg"; int *p; int *p2 = arr; 则: sizeof(arr) = 20 //5 个元素,每个元素占 4 字节 sizeof(arr) / sizeof(arr[0]) = 5 sizeof(arr2) = 6 //字符串末尾自动分配一个 ' ' sizeof(arr3) = 100 //指定了大小的 char 型数组,指定多大就有多大 sizeof(int) = 4 sizeof(char) = 1 sizeof(*p) = 8 sizeof(*p2) = 8 //指针变量都是八个字节
如果用sizeof计算vector类型,则会出错,如:
有一个vector类型vec vec中存放了 1 个元素,sizeof(vec)= 20 有一个vector类型vec2 vec2中存放了 2 个元素,sizeof(vec2)= 20
可见,sizeof计算vector类型事与愿违,并且verctor类型的大小与元素个数无关 。
②在c++中length()只用来计算字符串长度,如:
char arr[] = "abcd"; int arr2[3]; string str = "abcd"; 则: arr.length()报错 arr2.length()报错 str.length() = 4 //不是字符数组,不会自动加' '
③在c++中,size()可以计算字符串长度,还可以计算vector类型长度
④区分length和length(),length是属性,length()是方法.
length:对于一般集合类,取得其集合长度,例如:数组.length可以取得数组长度。
length():和c++一样,在Java中,对于一般字符串类,可以取得字符串长度
注意:length在Java中可以使用它,但在c++中不能使用



