C++ length()、size()、sizeof()、strlen()四者的区别,以及capacity()

本文详细解析了C++中处理字符串的几种方法,包括strlen(), length(), size()和sizeof()的区别及用法,同时对比了size()与capacity()在vector容器中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 讨论字符串的这几个函数

首先,length()、size()是STL string中的public成员函数;

strlen 是头文件 <cstring> 中的函数;

而sizeof(),并不是一个函数,而是一个运算符。

函数原型:

size_type size() const 
size_type length() const;// 这两个函数起着相同的作用,返回string所包含的内容多少。
size_t strlen(const char* str);
#include<string>
#include<cstring>
#include<iostream>
using namespace std;

int main()
{
    char m[100] = "hello world";
    cout << "strlen()输出" << strlen(m) << endl;
    cout << "sizeof()输出" << sizeof(m)/sizeof(char) << endl;
    
    string s = m;
    cout << "size()输出" << s.size() << endl;
    cout << "length()输出" << s.length() << endl;
    return 0;
}


strlen()输出   11
sizeof()输出     100
size()输出         11
length()输出     11

在上面的代码,我们可以看出,strlen(),length(),size(),可以输出相同的内容,但是sizeof()输出的是100,即刚开始我们初始化m的时候,所申请的长度。这即是一个区别

不同点一:用法不一样,strlen()需要接受参数,length(),size()是面向对象的用法。 sizeof()是运算符。

不同点二:功能不一样,strlen(),length(),size()返回的是字符串的长度,sizeof()返回的是所占用的内存。

 

  • sizeof() 运算符

sizeof()运算符用来求对象所占内存空间的大小。

获取基本类型的大小   1、基本类型  sizeof(char) = 1;2、常数 sizeof(1) = 4; 

获取复杂数据的大小   1、结构体     2、数组    3、对象,,因此在查看内存对齐的时候,可以利用sizeof

struct {
    char a;
    int m;
}stu;
class A{
private:
    int _m;
    int _n;
public:
    void fun() {
        cout << "how are you" << endl;
    }
};

int main()
{
    char m[100] = "hh";
    A a;
    cout << sizeof(m)/sizeof(char) << endl; //输出100
    cout << sizeof(char) << endl; //输出1
    cout << sizeof(1) << endl; //输出4,即int类型
    cout << sizeof(stu) << endl;//输出8,牵扯到内存对齐的内容
    cout << sizeof(a) << endl; //输出8,牵扯到内存对齐和对象的存储,对象的内存只与成员变量有关,与成员函数无关
    cout << sizeof(A) << endl;//输出8
    return 0;
}

 

 

  • size() 和 capacity()

size() 在STL 中,可以返回容器里含有的值的数量;capacity()是 部分容器的函数,例如vector等。set,map等没有capacity这个函数

vector 容器的容量(用 capacity 表示),指的是在不分配更多内存的情况下,容器可以保存的最多元素个数;

而 vector 容器的大小(用 size 表示),指的是它实际所包含的元素个数。

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    std::vector<int>value{ 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47 };
    value.reserve(20);
    cout << "value 容量是:" << value.capacity() << endl;
    cout << "value 大小是:" << value.size() << endl;
    return 0;
}

//输出

value的容量是 20
value的大小是 15

结合该程序的输出结果,下图可以更好的说明 vector 容器容量和大小之间的关系。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值