string 中 size 和 capacity 的区别
时间: 2023-05-28 07:05:05 浏览: 65
在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。这样可以创建一个与传入对象相同值的新字符串对象。
C++的string
C++的string是一个标准库中的类,用于处理字符串。它提供了许多方便的方法来操作字符串,例如插入、删除、查找、替换等。以下是一些常用的string方法:
1. 创建string对象
```c++
string str1 = "hello"; // 直接赋值
string str2("world"); // 通过构造函数赋值
string str3(5, 'a'); // 通过构造函数赋值,生成5个'a'
```
2. 访问string对象
```c++
string str = "hello world";
char c = str[0]; // 通过下标访问
char c2 = str.at(1); // 通过at()方法访问
```
3. 修改string对象
```c++
string str = "hello world";
str[0] = 'H'; // 通过下标修改
str.at(6) = 'W'; // 通过at()方法修改
str.append("!!!"); // 在末尾添加字符串
str.insert(6, "C++"); // 在指定位置插入字符串
str.replace(0, 5, "Hi"); // 替换指定位置的字符串
str.erase(3, 2); // 删除指定位置的字符
```
4. 查找string对象
```c++
string str = "hello world";
int pos = str.find("world"); // 查找子串的位置
int pos2 = str.find_first_of("aeiou"); // 查找第一个元音字母的位置
int pos3 = str.find_last_of("aeiou"); // 查找最后一个元音字母的位置
```
5. string的大小和容量
```c++
string str = "hello world";
int size = str.size(); // 返回字符串的大小
int capacity = str.capacity(); // 返回字符串的容量
```