小工具知识网

当前位置: 首页 > 行业知识 > 【C++】string类模拟实现:探索其内部机制

行业知识

【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服务器怎么拆?