c++string类的模拟实现:扩容
作者:野牛程序员:2024-01-03 14:32:03 C++阅读 2863
C++的字符串类(std::string)通常会在需要时动态扩容以容纳更多的字符。以下是一个简化的C++字符串类的扩容模拟实现,用于展示如何处理扩容的情况。
#include <iostream>
#include <cstring>
class MyString {
private:
char* data;
size_t length;
size_t capacity;
public:
MyString() : data(nullptr), length(0), capacity(0) {}
// 构造函数
MyString(const char* str) {
length = strlen(str);
capacity = length + 1; // 包括字符串结束符'\\0'
data = new char[capacity];
strcpy(data, str);
}
// 析构函数
~MyString() {
delete[] data;
}
// 获取字符串长度
size_t size() const {
return length;
}
// 获取字符串容量
size_t get_capacity() const {
return capacity;
}
// 获取字符串内容
const char* c_str() const {
return data;
}
// 添加字符
void append(char c) {
if (length + 1 < capacity) {
data[length++] = c;
data[length] = '\\0'; // 更新字符串结束符
} else {
// 扩容
size_t new_capacity = capacity * 2;
char* new_data = new char[new_capacity];
strcpy(new_data, data);
delete[] data;
data = new_data;
capacity = new_capacity;
// 添加字符
data[length++] = c;
data[length] = '\\0'; // 更新字符串结束符
}
}
};
int main() {
MyString myStr("Hello");
std::cout << "Original String: " << myStr.c_str() << " (Capacity: " << myStr.get_capacity() << ")" << std::endl;
// 模拟扩容
myStr.append(' ');
myStr.append('W');
myStr.append('o');
myStr.append('r');
myStr.append('l');
myStr.append('d');
std::cout << "Modified String: " << myStr.c_str() << " (Capacity: " << myStr.get_capacity() << ")" << std::endl;
return 0;
}这个简单的模拟实现中,append 函数用于向字符串末尾添加字符,如果当前容量不足,则会进行扩容。扩容时,将字符串内容复制到新的更大的内存块,并释放旧内存块。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

