行业知识
【C++】string类模拟实现:探索其内部机制
2026-10-30 22:01:31
来源:互联网转载
前言
hello hello~ ,这里是大耳朵土土垚~ ,欢迎大家点赞关注收藏
个人主页:大耳朵土土垚的博客
所属专栏:C++入门至进阶
这里将会不定期更新有关C++的内容,希望大家多多点赞关注收藏
目录
- 前言
- 1.string类基本框架
- 2.string类模拟实现
- 2.1构造函数实现
- ✨string(const char* str)
- ✨ string(const string& s)
- 2.2赋值运算符重载
- ✨ string& operator=(const string& s)
- 2.3析构函数
- ✨ ~string()
- 2.4迭代器
- ✨普通迭代器
- ✨常量迭代器
- 2.5获取字符串指针
- ✨const char* c_str() const
- 2.6获取string类的容量
- ✨ size_t size() const
- ✨ size_t capacity()const
- 2.7[]重载
- ✨ char& operator[](size_t pos)
- ✨ const char& operator[](size_t pos) const
- 2.8空间操作
- ✨ void reserve(size_t n)
- ✨ void resize(size_t n, char ch = '
- ✨ bool empty()const ')
- ✨ void clear()
- 2.9尾插操作
- ✨void push_back(char ch)
- ✨void append(const char* str)
- ✨+=重载
- 2.10在pos位置插入
- ✨void insert(size_t pos, char ch)
- ✨void insert(size_t pos, const char* str)
- 2.11在pos位置删除
- ✨void erase(size_t pos = 0, size_t len = npos)
- 2.12查找字符/字符串
- ✨size_t find(char ch, size_t pos = 0)
- ✨size_t find(const char* str, size_t pos = 0)
- 2.13截取字符串
- 2.14交换函数
- ✨void swap(string& s)
- 2.15运算符重载
- ✨bool operator>(const string& s) const
- ✨bool operator==(const string& s) const
- ✨bool operator> (istream& is, string& str)
- ✨ostream& operatorclass string//定义string类{public://string();//构造函数string(const char* str = "");string(const string& s);//赋值运算符重载string& operator=(const string& s);//析构函数~string();typedef char* iterator;//定义迭代器typedef const char* const_iterator;//常量使用的迭代器iterator begin();iterator end();const_iterator begin() const;const_iterator end() const;//获取字符串指针const char* c_str() const;//获取string类的容量size_t size() const;size_t capacity()const;//[]重载char& operator[](size_t pos);const char& operator[](size_t pos) const;//常量版本//空间操作void reserve(size_t n);//预留空间void resize(size_t n, char ch = '');//重设空间大小bool empty()const;//判断字符串是否为空void clear();//清空字符串//尾插操作void push_back(char ch);//尾插字符void append(const char* str);//插入字符串//+=重载string& operator+=(char ch);//尾插字符string& operator+=(const char* str);//尾插字符串//在pos位置插入void insert(size_t pos, char ch);void insert(size_t pos, const char* str);//删除pos位置的值void erase(size_t pos = 0, size_t len = npos);//查找字符/字符串size_t find(char ch, size_t pos = 0);size_t find(const char* str, size_t pos = 0);//交换void swap(string& s);//截取字符串string substr(size_t pos = 0, size_t len = npos);//运算符重载bool operator> (istream& is, string& str);ostream& operator size_t len = strlen(str);//计算字符串长度 _str = new char[len + 1];//开辟空间 _size = _capacity = len;//设置capacity和size值 strcpy(_str, str);//拷贝字符串 }_str = new char[s._capacity + 1];strcpy(_str, s._str);_size = s._size;_capacity = s._capacity;}if (this != &s){char* tmp = new char[s._capacity + 1];strcpy(tmp, s._str);delete[] _str;_str = tmp;_size = s._size;_capacity = s._capacity;}return *this;} delete[] _str; _str = nullptr; _capacity = _size = 0;}void Test1(){tutu::string s1 = "hello";tutu::string s2(s1);tutu::string s3 = s1;}} return _str;//返回字符串指针}string::iterator string::end(){ return _str + _size;//返回字符串指向''的指针,也就是最后一个元素的下一个} return _str;}string::const_iterator string::end() const{ return _str + _size;} return _str;} return _size; } return _capacity; } assert(pos
上一篇:乱世群雄服务器怎么进入?
下一篇:dell720服务器怎么拆?