C/C++中获取数组/字符串/向量长度的方法总结
做leetcode默认是写函数,当出现关于数组的题目时,一般来说C++传入类型是vector,C传入类型是int型数组或char型数组,同时也需要知道数组的长度,在此一并总结。
1.非字符串数组:
sizeof(array) / sizeof (datatype)
注意如果用指针作为实参传入函数,sizeof(array)的值将出错,变为所指地址的值的长度
在C中可以用宏定义
#define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));}
在C++中可以用全局变量
template <class T> int getArrayLen(T& array) { return (sizeof(array) / sizeof(array[0])); }
2.字符串数组char*
(1)使用sizeof()
sizeof(array)-1
(2)使用strlen(),计算字符开始直到第一个\0出现
(3)使用.size(),类似sizeof
有一些注意点:
char* ss = "0123456789";
sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针
sizeof(*ss) 结果 1 ===》*ss是第一个字符
char ss[] = "0123456789";
sizeof(ss) 结果 11 ===》ss是数组,计算到/0位置,因此是10+1
sizeof(*ss) 结果 1 ===》*ss是第一个字符
char ss[100] = "0123456789";
sizeof(ss) 结果是100 ===》ss表示在内存中的大小 100×1
strlen(ss) 结果是10 ===》strlen是个函数内部实现是用一个循环计算到/0为止之前
int ss[100] = "0123456789";
sizeof(ss) 结果 400 ===》ss表示再内存中的大小 100×4
strlen(ss) 错误 ===》strlen的参数只能是char* 且必须是以'/0'结尾的
char q[]="abc";
char p[]="a/n";
sizeof(q),sizeof(p),strlen(q),strlen(p);
结果是 4 3 3 2
3.vector向量
相对简单方便,直接用
vector.size()
4.string类
string.size() string.length()