c++string类的模拟实现:扩容
作者:野牛程序员:2024-01-03 14:32:03 C++阅读 2457
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