C++中sizeof()、size()、length()、strlen()以及vector容器中size()的区别
(2018-04-06 21:24:03)
标签:
c学习 |
分类: C基础知识 |
1、sizeof()是一个运算符
获取类型原形所占用的字节长度:
sizeof(int)=4
sizeof(char*)=sizeof(int*)=4
sizeof("hellow")=6*sizeof(char)+1=7,包含空字符'\0'
sizeof(3.14)=sizeof(double)=8
int a[10]; int *p=a;
sizeof(a)=4*10=40; sizeof(p)=4;
string name="hellow";sizeof(name)=sizeof(string)=4;因为string是一个类,sizeof()获取类的大小
sizeof的用法:
(1)sizeof(对象)或者sizeof 对象
(2)sizeof(类型)
因为sizeof是运算符,因此在编译时就已经获得结果。
2、strlen()是计算字符串长度的函数
char a[]="hellow";//字符数组
char b[20]="hellow";//字符数组
string c='hellow';//字符串类的对象
strlen(a)=6;strlen(b)=6;//字符长度
sizeof(a)=7;sizeof(b)=20;//数组容量
sizeof(c)=4;//string类的大小
strlen的输入参数必须为char*,即字符指针,并且以'\0'结尾的字符数组
strlen必须include ,其余特点详见百度百科
3、size()与length()均为string类的成员函数
string a="hellow";
调用方式:
a.length()=6;
a.size()=6;
其中length()沿用C的风格,size则是引入STL后,作为STL容器的属性存在的,二者返回的结果一致。
4、STL容器中的vector(是向量类的集合,即模板)
vector是一个顺序行容器。相当于数组,在一块连续内存上存储数据,其大小可以不预先给定,自动扩展,一般可以将其作为动态数组使用。
#include
vector vec1;//定义一个不指定容量大小的int型容器
for(i=0;i<5;i++)
{
vec1.push_back(i);//在vec1后循环添加分别为0~4的int型元素
}
vector vec2(10);//定义一个包含10个duoble型元素的容器,默认初始化为0.0
vector有一个size()属性,可以返回对象元素的个数
调用方式:
vec1.size()=5;
vec2.size()=10;
sizeof(vec1)=sizeof(vec2)=sizeof(vector)=12;//获取vector容器的大小
Tips.获取数组长度方式:int a[10];
(1)与定义的数组在同一个作用域:sizeof(a)/sizeof(a[0])=40/4=10
(2)数组作为实参传入函数中:
int arry_length(int (*a)[10])
{
return
sizeof(*a)/sizeof(*a[0]);
}
调用方式:length=arry_length(&a);
注意:10必不可少
(3)引用方式数组传入函数中:
int arry_length(int (&a)[10])
{
return
sizeof(a)/sizeof(a[0]);
}
调用方式:length=arry_length(a)
注意:10必不可少
(4)使用vector容器定义数组
然后调用size()返回数组长度
获取类型原形所占用的字节长度:
sizeof(int)=4
sizeof(char*)=sizeof(int*)=4
sizeof("hellow")=6*sizeof(char)+1=7,包含空字符'\0'
sizeof(3.14)=sizeof(double)=8
int a[10];
string name="hellow";sizeof(name)=sizeof(string)=4;因为string是一个类,sizeof()获取类的大小
sizeof的用法:
(1)sizeof(对象)或者sizeof 对象
(2)sizeof(类型)
因为sizeof是运算符,因此在编译时就已经获得结果。
2、strlen()是计算字符串长度的函数
char a[]="hellow";//字符数组
char b[20]="hellow";//字符数组
string c='hellow';//字符串类的对象
strlen(a)=6;strlen(b)=6;//字符长度
sizeof(a)=7;sizeof(b)=20;//数组容量
sizeof(c)=4;//string类的大小
strlen的输入参数必须为char*,即字符指针,并且以'\0'结尾的字符数组
strlen必须include ,其余特点详见百度百科
3、size()与length()均为string类的成员函数
string a="hellow";
调用方式:
a.length()=6;
a.size()=6;
其中length()沿用C的风格,size则是引入STL后,作为STL容器的属性存在的,二者返回的结果一致。
4、STL容器中的vector(是向量类的集合,即模板)
vector是一个顺序行容器。相当于数组,在一块连续内存上存储数据,其大小可以不预先给定,自动扩展,一般可以将其作为动态数组使用。
#include
vector vec1;//定义一个不指定容量大小的int型容器
for(i=0;i<5;i++)
{
vec1.push_back(i);//在vec1后循环添加分别为0~4的int型元素
}
vector vec2(10);//定义一个包含10个duoble型元素的容器,默认初始化为0.0
vector有一个size()属性,可以返回对象元素的个数
调用方式:
vec1.size()=5;
vec2.size()=10;
sizeof(vec1)=sizeof(vec2)=sizeof(vector)=12;//获取vector容器的大小
Tips.获取数组长度方式:int a[10];
(1)与定义的数组在同一个作用域:sizeof(a)/sizeof(a[0])=40/4=10
(2)数组作为实参传入函数中:
int arry_length(int (*a)[10])
{
}
调用方式:length=arry_length(&a);
注意:10必不可少
(3)引用方式数组传入函数中:
int arry_length(int (&a)[10])
{
}
调用方式:length=arry_length(a)
注意:10必不可少
(4)使用vector容器定义数组
然后调用size()返回数组长度

加载中…