当前位置:网站首页 > 技术博客 > 正文

string数组的长度



在C语言中,或者说在我们平时使用的基本类型中,数组的长度都可以用 来求得。因为sizeof运算符可以求出每个对象所占内存的字节数,并且在这些基本类型组成的数组中,每个元素所占内存空间都是相同的,因此我们可以使用 “数量 = 总价 / 单价” 这种方式来计算。

那么在C++中我们可不可以这样做呢?
请看用例:
在这里插入图片描述
可以看到,使用这种方式我们成功求出了strArray中元素的个数。

而我们都知道的string字符串数组中每个string都是可变长度的,按理说使用 string 创建的数组每个元素所占空间大小都是不同的,那为什么仍然可以采用这种方式求成员个数呢?

string对象存储的内容大小与其所占的空间(栈空间)是没有关系的

string类型是个模板类( ) ,其中最后一个模板参数指定类申请内存的方式。

一个简答的示例:最初str指向"aa…",数据部分地址在 str.data() 中,str对象地址为str本身。
重新填充数据后,原空间不足以容纳200个’z’将重新申请空间。
在输出的结果中,可以发现。str对象的地址没有改变,只有数据部分地址改变了。
在这里插入图片描述

因此可以说string对象存储的内容大小与其所占的空间(栈空间)是没有关系的,因为数据部分存储在堆区中(空间适配器决定),换句话说在一个string的数组中每个string字符串所占的空间相同。
在这里插入图片描述

参考如下示例:

 

我们可以看到,s1所占总空间为 28 字节,而它只有一个成员 “1”,所占空间即为整个数组的空间。
s2所占空间为 56 字节,而它有两个元素,每个元素都占 28 字节,整个数组所占空间为 28 * 2 。
s3所占空间为 84 字节,而它有三个元素,每个元素都占 28 字节,整个数组所占空间为 28 * 3 。

如此以来,我们便可以使用 来计算string数组的长度了。

 
探究 _countof 宏函数

C/C++中定义了宏函数 _countof 用于求数组元素个数。

 

其中在C语言中,使用的是 与我们之前讨论的方法相同。

我们可以类比这个宏函数的定义,写一个模板函数:

 

在这里插入图片描述

string [] 对象遍历

string对象自身提供了一种 的方法(等价于length方法),用于获取字符串的长度。可以通过s[0].size()的方式获得其数组中s[0]字符串的长度。

 

其次,如果我们想要遍历 string [] 形式数组,可以采用以下几种方式:

 
使用 vector 数组代替 string [] 数组

对于vector类型,这是一种数组类型,它提供了 方法可以获取数组长度。

 

vector类型是一种容器适配器,其本身就是数组类型,因此类中提供了获取元素个数的方法。

而string类型同int类型,double类型一样可以作为一种基本的类型,封装到vector数组中使用。

在这里插入图片描述

版权声明


相关文章:

  • 使用ssh实现远程登录linux2025-03-18 17:29:59
  • cjson详解简书2025-03-18 17:29:59
  • linux中nice命令和renice命令2025-03-18 17:29:59
  • 预测模型的构建及应用2025-03-18 17:29:59
  • 序列化和反序列化的步骤2025-03-18 17:29:59
  • 计算机c语言基础知识2025-03-18 17:29:59
  • css中设置溢出隐藏2025-03-18 17:29:59
  • 线程的互斥和同步之间的区别和联系2025-03-18 17:29:59
  • windows tftp服务器2025-03-18 17:29:59
  • c++string format2025-03-18 17:29:59