【C++】string类模拟实现:探索其内部机制

2024-06-04 2490阅读

💞💞 前言

hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹

【C++】string类模拟实现:探索其内部机制 第1张

💥个人主页:大耳朵土土垚的博客

💥 所属专栏: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& operator class 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

    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]