c++中length() 和size() 和sizeof()的区别

在C++中,length()size()sizeof() 这三个函数在处理容器(如数组,向量等)和对象时有着不同的用途和返回值。

  1. sizeof():这是一个运算符,而不是函数,它返回一个给定类型或对象所占的字节数。这通常用于确定数据类型或对象的大小。例如,sizeof(int) 可能返回 4,取决于系统和编译器,而 sizeof(std::vector<int>) 可能返回 32 或 36,取决于向量的实现和底层硬件。需要注意的是,sizeof() 返回的是对象或类型在内存中的大小,而不是其中元素的数量。
  2. size():这是许多C++容器(如 std::vector, std::list, std::string等)的一个成员函数。它返回容器中元素的数量。例如,对于一个包含5个元素的 std::vector<int>size() 会返回5。
  3. length():这个函数通常是针对一些具有“长度”概念的容器,如 std::string。它返回字符串的字符数。对于 std::string 对象,length()size() 是一样的。
    length()size() 在功能上基本相同,都返回字符串中字符的数量。二者的主要区别体现在以下三个方面:
  4. 名称:这两个函数的功能是相同的,它们都返回字符串中字符的数量。只是名称不同,一个是length(),另一个是size()。
  5. 使用范围:size() 方法与其他的stl容器一致,比如vector, map等等。而 length() 与大多数人对于字符串的直觉感受一致。人们谈论一个单词,一个句子,一个段落的长度,而不是大小或者尺寸,因此 length() 方法是为了增强可读性。
  6. 实际使用:在实际使用中,size()length()可以互换使用,但更倾向于使用size(),因为它在stl容器中被广泛使用,并且也被一些其他的stl容器和算法使用。

总的来说,length()size() 都可以用于获取字符串的长度,二者本质区别不大,可以根据实际需要和使用场景选择合适的方法。

总结一下,sizeof() 是用来获取数据类型或对象在内存中的大小,而 size()length() 是用来获取容器或字符串中元素的数量。这些函数在使用时需要根据数据类型和上下文来确定使用哪一个。

  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
花了10块钱买的,希望对大家有帮助。/*############################################################################# * 文件名:file.c * 功能: 实现了指纹相关文件的操作 * modified by PRTsinghua@hotmail.com #############################################################################*/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "file.h" /* 对象的这些接口实现是私有的,不必为用户所知 */ typedef struct iFvsFile_t { FILE *pf; /* 文件指针 */ } iFvsFile_t; /****************************************************************************** * 功能:创建一个新的文件对象,只有在创建之后,文件对象才能为其它函数所用。 * 参数:无 * 返回:若创建失败,返回NULL;否则返回新的对象句柄。 ******************************************************************************/ FvsFile_t FileCreate() { iFvsFile_t* p = NULL; p = (iFvsFile_t*)malloc(sizeof(iFvsFile_t)); if (p!=NULL) p->pf = NULL; return (FvsFile_t)p; } /****************************************************************************** * 功能:破坏一个已经存在的文件对象,在毁坏之后,文件对象不能再为其它函数所用。 * 参数:file 即将删除的文件对象指针 * 返回:无返回值 ******************************************************************************/ void FileDestroy(FvsFile_t file) { iFvsFile_t* p = NULL; if (file==NULL) return; /* 关闭文件,如果它还打开着 */ (void)FileClose(file); p = file; free(p); } /****************************************************************************** * 功能:打开一个新的文件。一个文件可以读打开,写打开,或者被创建。 * 参数:file 文件对象 * name 待打开文件的名字 * flags 打开标志 * 返回:错误编号 ******************************************************************************/ FvsError_t FileOpen(FvsFile_t file, const FvsString_t name, const FvsFileOptions_t flags) { iFvsFile_t* p = (iFvsFile_t*)file; char strFlags[10]; int nflags = (int)flags; /* 关闭文件,如果已经打开 */ (void)FileClose(p); strcpy(strFlags, ""); if ( (nflags & FvsFileRead)!=0 && (nflags & FvsFileWrite)!=0 ) strcat(strFlags, "rw"); else { if ((nflags & FvsFileRead)!=0) strcat(strFlags, "r"); if ((nflags & FvsFileWrite)!=0) strcat(strFlags, "w"); } strcat(strFlags, "b"); if ((nflags & FvsFileCreate)!=0) strcat(strFlags, "+"); p->pf = fopen(name, strFlags); if (FileIsOpen(file)==FvsTrue) return FvsOK; return FvsFailure; } /****************************************************************************** * 功能:关闭一个文件对象,文件关闭之后,文件不再可用。 * 参数:file 文件对象 * 返回:错误编号 ******************************************************************************/ FvsError_t FileClose(FvsFile_t file) { iFvsFile_t* p = (iFvsFile_t*)file; int nerr = -1; if (p->pf!=NULL) { nerr = fclose(p->pf); p->pf = NULL; } if (nerr==0) return FvsOK; return FvsFailure; } /****************************************************************************** * 功能:测试一个文件是否打开 * 参数:file 文件对象 * 返回:文件打开,则返回true;否则返回false ******************************************************************************/ FvsBool_t FileIsOpen(const FvsFile_t file) { iFvsFile_t* p = (iFvsFile_t*)file; return (p->pf!=NULL)?FvsTrue:FvsFalse; } /****************************************************************************** * 功能:测试是否到了文件结尾 * 参数:file 文件对象 * 返回:到了结尾,返回true;否则返回false ******************************************************************************/ FvsBool_t FileIsAtEOF(const FvsFile_t file) { iFvsFile_t* p = (iFvsFile_t*)file; if (FileIsOpen(p)==FvsFalse) return FvsFalse; return (feof(p->pf)!=0)?FvsTrue:FvsFalse; } /****************************************************************************** * 功能:提交对文件所作的更改 * 参数:file 文件对象 * 返回:错误编号 ******************************************************************************/ FvsError_t FileCommit(FvsFile_t file) { iFvsFile_t* p = (iFvsFile_t*)file; return (fflush(p->pf)==0)?FvsOK:FvsFailure; } /****************************************************************************** * 功能:跳到文件的开头 * 参数:file 文件对象 * 返回:错误编号 ******************************************************************************/ FvsError_t FileSeekToBegin(FvsFile_t file) { iFvsFile_t* p = (iFvsFile_t*)file; if (FileIsOpen(p)==FvsTrue) { if (fseek(p->pf, 0, SEEK_SET)!=0) return FvsFailure; return FvsOK; } return FvsFailure; } /****************************************************************************** * 功能:跳到文件的结尾 * 参数:file 文件对象 * 返回:错误编号 ******************************************************************************/ FvsError_t FileSeekToEnd(FvsFile_t file) { iFvsFile_t* p = (iFvsFile_t*)file; if (FileIsOpen(p)==FvsTrue) { if (fseek(p->pf, 0, SEEK_END)!=0) return FvsFailure; return FvsOK; } return FvsFailure; } /****************************************************************************** * 功能:得到当前的文件指针位置 * 参数:file 文件对象 * 返回:当前的指针位置 ******************************************************************************/ FvsUint_t FileGetPosition(FvsFile_t file) { iFvsFile_t* p = (iFvsFile_t*)file; if (FileIsOpen(p)==FvsTrue) return (FvsUint_t)ftell(p->pf); return 0; } /****************************************************************************** * 功能:跳到文件的指定位置 * 参数:file 文件对象 * position 指定的文件位置 * 返回:错误编号 ******************************************************************************/ FvsError_t FileSeek(FvsFile_t file, const FvsUint_t position) { iFvsFile_t* p = (iFvsFile_t*)file; if (FileIsOpen(p)==FvsTrue) { if (fseek(p->pf, (long int)position, SEEK_SET)!=0) return FvsFailure; return FvsOK; } return FvsFailure; } /****************************************************************************** * 功能:从文件读数据,所读取的字节数由length决定。读取的数据保存于指针data。 * 参数:file 文件对象 * data 指向存储数据的数组 * length 要读取的字节数 * 返回:实际读取的字节数 ******************************************************************************/ FvsUint_t FileRead(FvsFile_t file, FvsPointer_t data, const FvsUint_t length) { iFvsFile_t* p = (iFvsFile_t*)file; return (FvsUint_t)fread(data, (size_t)1, (size_t)length, p->pf); } /****************************************************************************** * 功能:往文件写数据,所写的字节数由length决定。要写入的数据保存于指针data。 * 参数:file 文件对象 * data 指向存储数据的数组 * length 要写入的字节数 * 返回:实际写入的字节数 ******************************************************************************/ FvsUint_t FileWrite(FvsFile_t file, const FvsPointer_t data, const FvsUint_t length) { iFvsFile_t* p = (iFvsFile_t*)file; return (FvsUint_t)fwrite(data, (size_t)1, (size_t)length, p->pf); } /****************************************************************************** * 功能:从文件得到一个字节 * 参数:file 文件对象 * 返回:读取的字节 ******************************************************************************/ FvsByte_t FileGetByte(FvsFile_t file) { iFvsFile_t* p = (iFvsFile_t*)file; return (FvsByte_t)fgetc(p->pf); } /****************************************************************************** * 功能:从文件读取一个字 * 参数:file 文件对象 * 返回:读取的字 ******************************************************************************/ FvsWord_t FileGetWord(FvsFile_t file) { iFvsFile_t* p = (iFvsFile_t*)file; FvsWord_t w = (FvsWord_t)fgetc(p->pf); return (w<<8)+fgetc(p->pf); }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值