string 中 size 和 capacity 的区别
时间: 2023-05-28 20:05:05 浏览: 136
在C++中,string是一种动态分配的字符串类型,可以自动扩展大小以适应字符串的长度。在这种情况下,size和capacity是两个非常重要的概念。
size表示字符串实际包含的字符数,即字符串的长度。它可以使用size()函数获取,如下所示:
```cpp
string str = "hello world";
int length = str.size(); // length = 11
```
capacity表示当前string对象已经分配的内存空间,即它可以容纳的最大字符数。当string对象的实际大小超过其容量时,它将重新分配内存以容纳更多字符。可以使用capacity()函数获取它的容量,如下所示:
```cpp
string str = "hello world";
int capacity = str.capacity(); // capacity = 15
```
在上面的例子中,字符串"hello world"的实际长度为11,但它的容量为15,因为string类在内部预留了一些额外的空间。这些额外的空间可以用于动态扩展字符串,以避免频繁地重新分配内存。因此,当字符串大小超过容量时,它会自动重新分配内存,以容纳更多字符。
总之,size表示实际包含的字符数,而capacity表示string对象已经分配的内存空间。在处理字符串时,了解这两个概念的区别非常重要。
相关问题
string(const string& s): _str(nullptr), _size(0), _capacity(0)
这段代码看起来像是C++中的字符串类(string)的拷贝构造函数。拷贝构造函数是一种特殊的构造函数,用于创建一个新对象,并将其初始化为与给定对象相同的值。
在这段代码中,拷贝构造函数的参数是一个常量引用(const string& s),表示传入的参数是一个常量字符串对象的引用。常量引用避免了不必要的拷贝操作,提高了效率。
接下来的代码段 ": _str(nullptr), _size(0), _capacity(0)" 则是对字符串对象的成员变量进行初始化。"_str"表示字符串的字符存储的指针,"_size"表示字符串的长度,"_capacity"表示字符串的容量(即字符存储空间的大小)。
整体来看,这段代码是在定义一个拷贝构造函数,用于将传入的字符串对象进行拷贝,并将新对象的成员变量初始化为空指针、长度为0、容量为0。这样可以创建一个与传入对象相同值的新字符串对象。
//录入宿舍信息 void add_dorm(Dormitory* dorms, int& size) { Dormitory dorm; cout << "请输入宿舍号:"; cin >> dorm.dorm_num; cout << "请输入性别(m/f):"; cin >> dorm.gender; cout << "请输入容纳人数:"; cin >> dorm.capacity; cout << "请输入住宿费用:"; cin >> dorm.fee; dorm.occupied = 0; dorm.names = new string[dorm.capacity]; dorms[size] = dorm; size++; cout << "宿舍号 "<<dorm.dorm_num<<" 添加成功!" << endl; }
这是一个函数,用于向一个Dormitory类型的数组中添加新的宿舍信息。具体步骤如下:
1. 定义一个Dormitory类型的变量dorm。
2. 要求用户输入宿舍号、性别、容纳人数和住宿费用,分别保存到dorm的对应属性中。
3. 将dorm的occupied属性赋值为0,表示该宿舍当前没有人住。
4. 动态分配一个string类型的数组,大小为dorm的capacity属性,用于存储住宿该宿舍的学生姓名。
5. 将dorm添加到dorms数组的末尾,并将size加1。
6. 输出添加成功的信息。
需要注意的是,该函数假设调用者已经创建好了一个Dormitory类型的数组dorms,并且将该数组的大小保存在变量size中。同时,为了避免内存泄漏,需要在程序的其他地方负责释放每个宿舍的names数组。
阅读全文