『C++成长记』string模拟实现
以下是一个简化的String
类模板的实现,用于演示如何模拟实现std::string
的基本功能。注意,这个实现没有包含所有std::string
的功能,比如迭代器访问、初始化列表、异常处理等。它的目的是为了演示基本的字符串操作和内存管理。
#include <iostream>
#include <cstring>
#include <algorithm>
template<typename CharT>
class BasicString {
public:
using size_type = size_t;
using value_type = CharT;
BasicString() : data_(new value_type[1]) {
data_[0] = '\0';
}
BasicString(const value_type* str) {
size_t size = std::strlen(str) + 1;
data_ = new value_type[size];
std::strcpy(data_, str);
}
BasicString(const BasicString& other) {
size_t size = std::strlen(other.data_) + 1;
data_ = new value_type[size];
std::strcpy(data_, other.data_);
}
BasicString& operator=(const BasicString& other) {
if (this != &other) {
delete[] data_;
size_t size = std::strlen(other.data_) + 1;
data_ = new value_type[size];
std::strcpy(data_, other.data_);
}
return *this;
}
~BasicString() {
delete[] data_;
}
const value_type* c_str() const {
return data_;
}
size_type size() const {
return std::strlen(data_);
}
value_type& operator[](size_type pos)
return data_[pos];
}
const value_type& operator[](size_type pos) const {
return data_[pos];
}
private:
value_type* data_;
};
int main() {
BasicString<char> myString("Hello, World!");
std::cout << myString.c_str() << std::endl;
std::cout << "Size: " << myString.size() << std::endl;
myString[0] = 'h';
std::cout << myString.c_str() << std::endl;
return 0;
}
这个代码实现了一个简单的字符串类,它使用动态分配的数组来存储字符串数据。它展示了如何实现拷贝构造函数、拷贝赋值运算符以及析构函数来管理内存。它还提供了c_str()
方法来获取C风格的字符串和size()
方法来获取字符串的长度。最后,它演示了如何通过下标运算符来访问字符串中的单个字符。
评论已关闭