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

网站收录减少河南移动商城网站建设

网站收录减少,河南移动商城网站建设,网络工程师培训学校,域名建设好了怎么在建设网站作文目的 本文是为了加深对string底层函数的一点理解(请勿与底层源码混为一谈)#xff0c;下面从模拟与注意项出发。 一.string 功能化模拟 1.迭代器模拟 迭代器#xff0c;为实现简单便理解故使用指针的方式(非说明迭代器使用该方法实现)。其中的begin、end都是为了给迭代…作文目的 本文是为了加深对string底层函数的一点理解(请勿与底层源码混为一谈)下面从模拟与注意项出发。 一.string 功能化模拟 1.迭代器模拟 迭代器为实现简单便理解故使用指针的方式(非说明迭代器使用该方法实现)。其中的begin、end都是为了给迭代器提供范围。迭代器也只认该俩函数不可使用其他名称。 typedef char* iterator;typedef const char* const_iterator;const_iterator begin()const {return _str;}const_iterator end()const {return _str _size;}iterator begin(){return _str;}iterator end(){return _str _size;}char operator[](size_t pos)const{assert(pos_size);return _str[pos]; }const char operator[](size_t pos)const{assert(pos_size);return _str[pos];} 2.reserve模拟 该模拟块的实现在于空间的扩展该处的空间扩展方案并不受限制 可自行选择。切记释放空间防止空间浪费好习惯。 void reserve(size_t sub){if(sub_capacity){char* retnew char[sub1];delete []_str;_strret;_capacitysub;}} 3.resize模拟实现块 该模块的实现需要分清情况他是要扩大有效值范围还是缩小范围如果扩大是否有填充值最大空间是否能够容纳如在不定义填充值时补充缺省值 \0,即不改变数据也扩大了空间也能在需要时不必重构函数接口。 void resize(size_t size,char ch\0){if(size_size){_str[size]\0;}else{//可省略判断if(size_capacity){reserve(size);}for(int i _size;isize;i){_str[i]ch; }_str[size]\0;}_sizesize;} 4.insert 模拟实现块 在insert接口不仅仅要实现单字符的插入还要可插入字符串的能力同时不管_str中是否有值 都要追加值但是如果指定插入点超出实际有效值长时也必须处理。其次空间不足时也得先扩充空间不然会出现错误访问。 void insert(size_t pos, char ch) {assert(pos _size);if (_size _capacity) {reserve(_capacity 0 ? 4 : 2 * _capacity);}//腾出一块空间将pos之后的数据后移size_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);int size strlen(str);if (size _size _capacity) {reserve(size _size);}int end _size size;//下标while (end _size size-1) {_str[end] _str[end - size];end--;}//在pos位置开始拷贝插入size个strncpy(_str pos, str,size);_size size;} 5.erase模拟实现块 该接口主在优化当len大于_size则一定是全删不必浪费时间去处理只有有值得有效调动是 才前移数据。 void erase (size_t pos 0, size_t len npos) assert (pos _size);if(len_size-pos) _str[pos]\0;}else{while (_sizeposlen){_str[pos]_str[poslen];pos;}}_size-pos6.find模拟实现块 find查找函数与平时写的查找函数没什么区别无非就是别越界。 size_t find (char c, size_t pos 0) const; {assert(pos_size);for(int ipos;i_size;i){if(_s[i]c){return i;}}return npos; } size_t find (const char* c, size_t pos 0) const; {assert(pos_size);const char*pstrstr(_strpos,c);if(p)return p-_str;elsereturn npos; } 7.substr模拟实现块 截取函数顾名思义就是截取指定长度中有的效数据当指定截取范围远大于有效范围是就只截取有效范围内的数据。 string substr (size_t pos 0, size_t len npos) const {assert(pos_size);string st;if(len_size-pos){for(int ipos;i_size;i){st_str[i]; } }else{for(int ipos;iposlen;i){st_str[i]; } }return st; } 8.输入流 第一个代码并非有错误但是他不太胜任这份工作他对接口的调用太过于频繁产生极大且不必要的浪费故代码二采用模拟缓冲区的办法减轻对接口的调用浪费。 ps: in.get()是输入流提供的一个接收缓冲区单字符的接口弥补cin不能读储空字符与换行符的缺点 ps: clear每次插入数据都是一个新值故清空空间。 /*istream operator (istream is, string str){str.clear();char ch;chis.get();while(ch! ch!\n){chis.get();strch;} return str; } */ istream operator (istream is, string str){str.clear();int i0;char ch;char buff[128];chis.get();while(ch! ch!\n){buff[i]ch;i;if(i127){buff[127]\0;i0;strbuff; }chis.get();}buff[i]\0;strbuff;return is;}istream getlien(istream is, string str){str.clear();int i0;char ch;char buff[128];chis.get();while(ch!\n){buff[i]ch;i;if(i127){buff[127]\0;i0;strbuff; }chis.get();}buff[i]\0;strbuff;return is;} 9.拷贝函数 两种方法都是按同一个方向指向仅方法实现不同。 // s2(s1) /*string(const string s) {_str new char[s._capacity 1];strcpy(_str, s._str);_size s._size;_capacity s._capacity; }*/// s1 s3; /*string operator(const string s) {char* tmp new char[s._capacity 1];strcpy(tmp, s._str);delete[] _str;_str tmp;_size s._size;_capacity s._capacity;return *this; }*/string(string str){string tmp(str);swap(str);}string operator(string str){swap(str);return *this; } 二.完整版 #pragma once #define _CRT_SECURE_NO_WARNINGS #includeiostream #includeassert.h using namespace std; namespace bit {class string {public:typedef char* iterator;typedef const char* const_iterator;const_iterator begin()const {return _str;}const_iterator end()const {return _str _size;}iterator begin() {return _str;}iterator end() {return _str _size;}string(const char* str ):_size(strlen(str)){_str new char[_size 1];strcpy(_str, str);_capacity _size;}string(const string str){string tmp(str._str);swap(tmp);}string operator( string str){swap(str);return *this;}~string(){delete[] _str;_str nullptr;_size _capacity 0;}size_t size()const {return _size;}const char* c_str()const {return _str;}size_t capacity() {return _capacity;}void clear() {_str[0] \0;_size 0;}const char operator[](size_t i)const {assert(i _size);return _str[i];}char operator[](size_t i) {assert(i _size);return _str[i];}void reserve(size_t sub) {if (sub _capacity) {char* ret new char[sub 1];strcpy(ret, _str);delete[] _str;_str ret;_capacity sub;}}void resize(size_t size, char ch \0) {if (size _size) {_str[size] \0;_size size;}else {if (size _capacity) {reserve(size);}for (int i _size; i size; i){_str[i] ch;}_str[size] \0;_size size;}}void insert(size_t pos, char ch) {assert(pos _size);if (_size _capacity) {reserve(_capacity 0 ? 4 : 2 * _capacity);}size_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);int size strlen(str);if (size _size _capacity) {reserve(size _size);}int end _size size;while (end possize-1) {_str[end] _str[end - size];end--;}strncpy(_str pos, str, size);_size size;}void append(const char* str) {insert(_size, str);}void push_back(const char ch) {insert(_size, ch);}string operator (const char* s) {append(s);return *this;}string operator (const char s) {push_back(s);return *this;}void erase(size_t pos 0, size_t len npos) {assert(pos _size);if (len _size) {_str[pos] \0;}else {while (_size pos len){_str[pos]_str[pos len];pos;}_str[pos] \0;}_size - pos;}void swap(string str) {std::swap(_str, str._str);std::swap(_size, str._size);std::swap(_capacity, str._capacity);}size_t find(char c,size_t pos0)const{assert(pos _size);for (int i pos; i _size; i) {if (_str[i] c) {return i;}}return npos;}size_t find(const char* c, size_t pos 0) const{assert(pos _size);const char* p strstr(_str pos, c);if (p)return p - _str;elsereturn npos;}string substr(size_t pos 0, size_t len npos) const{string st ;assert(pos _size);if (len _size- pos){for (size_t i pos; i _size;i){st_str[i];}}else{for (size_t i pos; i pos len;i){st_str[i];}}return st;}static const int npos;private:char* _str nullptr;size_t _size 0;size_t _capacity 0;};const int string::npos -1;void swap(string rhs, string lhs) {rhs.swap(lhs);}bool operator(const string rhs, const string lhs) {return !strcmp(rhs.c_str(), lhs.c_str());}bool operator!(const string rhs, const string lhs) {return !(rhs lhs);}bool operator(const string rhs, const string lhs) {return strcmp(rhs.c_str(), lhs.c_str());}bool operator(const string rhs, const string lhs) {return rhs lhs || rhs lhs;}bool operator(const string rhs, const string lhs) {return !(rhs lhs);}bool operator(const string rhs, const string lhs) {return (rhs lhs) || (rhs lhs);}ostream operator(ostream os, const string str){for (auto ret :str){os ret;}return os;}istream operator (istream is, string str){str.clear();int i 0; char ch;char buff[128] ;ch is.get();while (ch ! ch ! \n) {buff[i]ch;i;if (i 127){buff[128]\0;i 0;strbuff;}ch is.get();}buff[i] \0;strbuff;return is;}istream getline(istream is, string str){str.clear();size_t i 0; char ch;char buff[128] ;ch is.get();while (ch ! \n) {buff[i] ch;i;if (i 127){buff[127] \0;str buff;i 0;}ch is.get();}if (i 0) {buff[i] \0;str buff;}return is;} } 本文多在理解感谢观看
http://www.pierceye.com/news/433160/

相关文章:

  • wdcp网站搬家wordpress 改成宽屏
  • 汽车网站建设规划书洛阳恢复客运最新通知
  • 商洛建设网站有了网站源码可以做网站吗
  • 网站运营学习电子商务网站建设与管理的实验报告
  • 上海设计网站与太原免费网络推广哪里朿
  • 网站前端建设需要学会什么珠海网站优化公司
  • 北京微网站wordpress添加代码运行
  • 浙江省住房和城乡建设厅网站网站开发流程博客
  • 网站刷流量会怎么样广东网站备案时间
  • 昆明企业建站模板如何做网站品类
  • 学做网站去哪学网站开发app开发
  • 如何编写网站建设销售的心得网页设计制作方法
  • seo工具网站课程网站建设的步骤
  • 商务网站的类型一共有几大类小程序搜索排名帝搜sem880官网
  • 做海报的高清模板的网站诛仙3官方网站做花灯答案
  • 好用的网站后台管理系统黑龙江最新通知今天
  • 做招聘网站需要多少钱als冰桶挑战赛的网络营销方式
  • wordpress单位内网做网站云南省文山州网站建设
  • 单页网站制作视频教程四川餐饮培训学校排名
  • 微信公众平台网站建设wordpress中英切换
  • 万网x3主机l系统放两个网站自学设计的网站
  • 网站微信建设运维经验分享图营销app
  • 西安网站开发软件常州注册公司
  • 和网站建设相关的行业企业网络规划设计方案
  • 风中有朵雨做的云网站观看开网店教程
  • 网站建设与管理教学视频教程服务器绑定网站打不开
  • 百度云建站WordPress开发新客户的十大渠道
  • 南宁比优建站视屏网站的审核是怎么做的
  • 怎样建设尧都水果网站免费手机网站建站系统
  • 全网营销提供seo服务