一、问题
①在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 //字符串末尾自动分配一个 '\0'
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 //不是字符数组,不会自动加'\0'
③在c++中,size()可以计算字符串长度,还可以计算vector类型长度
④区分length和length(),length是属性,length()是方法.
length:对于一般集合类,取得其集合长度,例如:数组.length可以取得数组长度。
length():和c++一样,在Java中,对于一般字符串类,可以取得字符串长度
注意:length在Java中可以使用它,但在c++中不能使用