手机怎做网站天津市城乡建设部网站首页

当前位置: 首页 > news >正文

手机怎做网站,天津市城乡建设部网站首页,芜湖网站备案咨询电话,网站LOGO透明底色PNG格式怎么做的【小梦C嘎嘎——启航篇】string常用接口的模拟实现#x1f60e; 前言#x1f64c;string 模拟实现1、iterator 迭代器相关使用函数实现2、构造函数接口实现3、 传统写法——拷贝构造函数接口实现4、 现代写法——拷贝构造函数接口实现5、析构函数接口实现6、传统写法—— 赋… 【小梦C嘎嘎——启航篇】string常用接口的模拟实现 前言string 模拟实现1、iterator 迭代器相关使用函数实现2、构造函数接口实现3、 传统写法——拷贝构造函数接口实现4、 现代写法——拷贝构造函数接口实现5、析构函数接口实现6、传统写法—— 赋值运算符重载函数接口实现7、现代写法—— 赋值运算符重载函数接口实现8 、极致现代写法—— 赋值运算符重载函数接口实现9、swap函数接口实现10、【】下标访问函数接口实现11、容量、大小数据获取函数接口实现12、C语言格式函数字符串获取函数接口实现13、扩容函数reserve实现接口14、resize函数实现扩容改变size初始化实现接口15、find函数接口实现16、substr 取子串函数接口实现17、尾插函数接口实现18、append函数尾插字符串接口实现19、 运算符重载函数实现20、任意位置插入字符/字符串函数接口实现21、任意位置删除len个字符22、字符串大小比较运算符重载函数实现23、清空函数clear函数接口实现24、流插入运算符重载函数接口实现25、流提取运算符重载函数接口实现判空函数接口实现 总结撒花 博客昵称博客小梦 最喜欢的座右铭全神贯注的上吧 作者简介一名热爱C/C算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主 博主小留言哈喽各位CSDN的uu们我是你的博客好友小梦希望我的文章可以给您带来一定的帮助话不多说文章推上欢迎大家在评论区唠嗑指正觉得好的话别忘了一键三连哦 前言 哈喽各位友友们我今天又学到了很多有趣的知识现在迫不及待的想和大家分享一下都是精华内容可不要错过哟 string 模拟实现 1、iterator 迭代器相关使用函数实现 iterator begin(){return _str;}terator end(){return _str _size;}//针对const对象设计的版本const_iterator begin() const{return _str;}const_iterator end() const{return _str _size;} 2、构造函数接口实现 tring(const char* str ):_size(strlen(str)), _capacity(_size){_str new char[_capacity 1];strcpy(_str, str);}3、 传统写法——拷贝构造函数接口实现 // 传统写法 //s2(s1)string(const string s):_str(nullptr),_size(0),_capacity(0){_str new char[s._capacity 1];strcpy(_str, s._str);_capacity s._capacity;_size s._size;}4、 现代写法——拷贝构造函数接口实现 // s2(s1)string(const string s):_str(nullptr), _size(0), _capacity(0){string tmp(s._str);swap(tmp);}5、析构函数接口实现 string(){delete[] _str;_str nullptr;_size _capacity 0;}6、传统写法—— 赋值运算符重载函数接口实现 // s2 s3string operator(const string s){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;}7、现代写法—— 赋值运算符重载函数接口实现 // s2 s3string operator(const string s){if (this ! s){string tmp(s);//this-swap(tmp);swap(tmp);}return *this;} 8 、极致现代写法—— 赋值运算符重载函数接口实现 // s2 s3string operator(string tmp){swap(tmp);return this;}9、swap函数接口实现 void swap(string s){std::swap(_str, s._str);std::swap(_size, s._size);std::swap(_capacity, s._capacity);}10、【】下标访问函数接口实现 char operator{assert(pos _size);return _str[pos];}const char operator const{assert(pos _size);return _str[pos];}11、容量、大小数据获取函数接口实现 size_t capacity() const{return _capacity;}size_t size() const{return _size;}12、C语言格式函数字符串获取函数接口实现 const char c_str() const{return _str;}13、扩容函数reserve实现接口 void reserve(size_t n){if (n _capacity){char* tmp new char[n 1];strcpy(tmp, _str);delete[] _str;_str tmp;_capacity n;}}14、resize函数实现扩容改变size初始化实现接口 void resize(size_t n, char ch \0){if (n _size){_str[n] \0;_size n;}else{reserve(n);while (_size n){_str[_size] ch;_size;}_str[_size] \0;}} 15、find函数接口实现 size_t find(char ch, size_t pos 0){for (size_t i pos; i _size; i){if (_str[i] ch){return i;}}return npos;}size_t find(const char* sub, size_t pos 0){const char* p strstr(_str pos, sub);if (p){return p - _str;}else{return npos;}}16、substr 取子串函数接口实现 string substr(size_t pos, size_t len npos){string s;size_t end pos len;if (len npos || pos len _size) // 有多少取多少{len _size - pos;end _size;}s.reserve(len);for (size_t i pos; i end; i){s _str[i];}return s;}17、尾插函数接口实现 void push_back(char ch){if (_size _capacity){reserve(_capacity 0 ? 4 : _capacity * 2);}_str[_size] ch;_size;_str[_size] \0;}18、append函数尾插字符串接口实现 void append(const char* str){size_t len strlen(str);if (_size len _capacity){reserve(_size len);}strcpy(_str _size, str);_size len;}19、 运算符重载函数实现 string operator(char ch){push_back(ch);return this;}string operator(const char str){append(str);return *this;}20、任意位置插入字符/字符串函数接口实现 // insert(0, x)void insert(size_t pos, char ch){assert(pos _size);if (_size _capacity){reserve(_capacity 0 ? 4 : _capacity * 2);}// 17:17size_t end _size 1;while (end pos){_str[end] _str[end - 1];–end;}_str[pos] ch;_size;}//任意位置插入一个字符串void insert(size_t pos, const char* str){assert(pos _size);size_t len strlen(str);if (_size len _capacity){reserve(_size len);}// 挪动数据int end _size;while (end (int)pos){_str[end len] _str[end];–end;}strncpy(_str pos, str, len);_size len;} 21、任意位置删除len个字符 void erase(size_t pos, size_t len npos){assert(pos _size);if (len npos || pos len _size){_str[pos] \0;_size pos;}else{size_t begin pos len;while (begin _size){_str[begin - len] _str[begin];begin;}_size - len;}}22、字符串大小比较运算符重载函数实现 bool operator(const string s) const{return strcmp(_str, s._str) 0;}bool operator(const string s) const{return strcmp(_str, s._str) 0;}bool operator(const string s) const{return *this s || *this s;}bool operator(const string s) const{return !(*this s);}bool operator(const string s) const{return !(*this s);}bool operator!(const string s) const{return !(*this s);}23、清空函数clear函数接口实现 void clear(){_str[0] \0;_size 0;}24、流插入运算符重载函数接口实现 ostream operator(ostream out, const string s){/for (size_t i 0; i s.size(); i){out s[i];}/for (auto ch : s)out ch;return out;}25、流提取运算符重载函数接口实现 istream operator(istream in, string s){// 17:15继续s.clear();//s.reserve(128);char buff[129];size_t i 0;char ch;ch in.get();while (ch ! ch ! \n){buff[i] ch;if (i 128){buff[i] \0;s buff;i 0;}//s ch;ch in.get();}if (i ! 0){buff[i] \0;s buff;}return in;} 判空函数接口实现 bool empty()const{return _size 0;}总结撒花 希望大家通过阅读此文有所收获    如果我写的有什么不好之处请在文章下方给出你宝贵的意见。如果觉得我写的好的话请点个赞赞和关注哦