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

织梦购物网站整站源码运城建设局网站

织梦购物网站整站源码,运城建设局网站,河池网站开发工程师招聘网,网站建设算不算固定资产1#xff1a;实现一个字符串类。 简单汇总 最简单的方案#xff0c;使用一个字符串指针#xff0c;以及实际字符串长度即可。 参考stl的实现#xff0c;为了提升string的性能#xff0c;实际上单纯的字符串指针和实际长度是不够了#xff0c;如上#xff0c;有优化方案…1实现一个字符串类。 简单汇总 最简单的方案使用一个字符串指针以及实际字符串长度即可。 参考stl的实现为了提升string的性能实际上单纯的字符串指针和实际长度是不够了如上有优化方案除此之外考虑reserve() 以及重置容量迭代器的相关实现逻辑 (小字符串的存储优化结合占用内存大小4的倍数分配适当的缓冲区更好)。 类中如果没有成员变量类的大小为1如果有成员变量类的大小即为成员变量的大小。以前研究过 sizeof(string)的长度 可能是28 或者32 2实现注意细节 1c字符串指针 实际字符串的长度进行数据存储 2内存的申请和释放 用new/delete 或者malloc/free都可以吧 字符串的赋值借用strcpy 或者memcpy都可以吧。 3默认构造函数 c字符串传参构造 拷贝构造深拷贝 移动构造浅拷贝 std::move 赋值复制构造 赋值移动构造右参std::move) 4注意整个过程中 const参数的修饰以及相关函数返回值 返回引用对象和返回对象。 5重载必要的运算符 输入输出的重载 ,注意重载和时和friend关键字配合以及实现细节。 6c字符串相关函数strcpy strcmp strlen strcat strchr 3源码测试 3.1 类的声明思考constnoexcept修饰复制传参引用传参以及返回值返回引用 返回对象 /************************************* 1:不需要考虑太多直接字符串指针和长度进行实现。 2:考虑该类的大小如果字符串为null时如果字符串有长度时。 (字符串拼接 截断等) 3:字符串性能的优化短字符串直接存栈中长的进行申请。 其他考虑迭代器等的实现方案。只考虑指针和长度进行实现1:默认构造函数。2:C字符串初始化直接初始化移动构造。 拷贝构造函数赋值构造函数。3:重载运算符 **************************************/ #include iostream #include cstring#include stdio.h class my_string { private:char* data;size_t length;public://默认构造函数 c字符串构造 拷贝构造函数 移动构造函数 赋值构造函数 my_string();my_string(const char* str);my_string(const my_string other);my_string(my_string other) noexcept;~my_string();size_t size() const;const char* c_str() const;// my_string operator (const my_string other) noexcept; //赋值构造函数 复制my_string operator (my_string other) noexcept; //移动赋值构造函数bool operator(const my_string other) const;my_string operator (const my_string other) const; //注意friend的定义friend std::ostream operator(std::ostream os, const my_string str);friend std::istream operator(std::istream in, my_string str); //输入需要可修改 };3.2 类的定义 //函数前面用const 表示的是函数返回值const //函数后面用用const修饰 可以使常量调用表示该函数内部不可以修改成员变量 my_string::my_string() :data(nullptr), length(0) {printf(my_string() \n);data new char[1];data[0] \0; }//c字符串对string进行初始化 c字符串为NULL 不为NULL //以及c字符串本身也是一以\0终止 my_string::my_string(const char* str) {printf( my_string(const char * str) %s \n, str);if (str){length strlen(str); //str为NULL 会导致抛异常 data new char[length 1];strcpy(data, str);}else{data new char[1];data[0] \0;length 0;} }//字符串之间 拷贝构造函数 使用传递引用的方式提升性能 //在自己类的成员函数中 参数可以直接访问私有成员 my_string::my_string(const my_string other) {printf( my_string(const my_string str) %s \n, other.data);length other.length;data new char[length 1];strcpy(data, other.data); }//移动构造函数 注意 浅拷贝 my_string::my_string(my_string other) noexcept {printf( my_string(my_string str) %s \n, other.data);//不用申请内存 直接进行赋值即可data other.data;length other.length;other.data nullptr;other.length 0; }my_string::~my_string() {printf(~my_string() %s \n, data);if(data)delete[]data; }size_t my_string::size() const {return length; }const char* my_string::c_str() const {return data; }// //深拷贝 注意对象可能同一个 返回对象的引用 my_string my_string::operator (const my_string other) noexcept//赋值构造函数 复制 {printf(operator (const my_string other) %s \n, other.data);if (this other){return *this;}//赋值 先清理 再赋值delete[]data;length other.length;data new char[length 1];strcpy(data, other.data);return *this; }//浅拷贝 注意对象可能一个 返回引用 my_string my_string::operator (my_string other) noexcept //移动赋值构造函数 {printf(operator (my_string other) %s \n, other.data);if (this other){return *this;}data other.data;length other.length;other.data nullptr;other.length 0;return *this; //返回对象的引用 }//判断两个字符串相等 bool my_string::operator(const my_string other) const {printf(operator(const my_string other) %s \n, other.data);return strcmp(data, other.data) 0; }my_string my_string::operator (const my_string other) const {printf(operator (const my_string other) %s \n, other.data);my_string NewString;NewString.length length other.length;NewString.data new char[NewString.length 1];strcpy(NewString.data, data);strcpy(NewString.data, other.data);return NewString; //函数中定义的对象 返回该拷贝 }注意operator 和operator和friend的细节。 //输出 std::ostream operator (std::ostream os, const my_string str) {os str.data;return os; } std::istream operator(std::istream in, my_string str) {//或者按行输入获取字符串const size_t BUFFER_SIZE 1024;char buffer[BUFFER_SIZE] { 0 };in buffer;str.length strlen(buffer);delete[] str.data; //理论上都是已有对象进行输入 str.data new char[str.length 1];strcpy(str.data, buffer);return in; }3.3 测试代码 int main() {//默认构造函数测试my_string str; //默认构造函数my_string str_c(c string); //c字符串构造my_string str_str(str_c); //拷贝构造吧printf(size %d dara %s \n, str_str.size(), str_str.c_str());my_string str_move(std::move(str_str)); //移动语义if (str_str.c_str() nullptr){printf(size %d dara nullptr \n, str_str.size());}printf(size %d dara %s \n, str_move.size(), str_move.c_str());std::cout \nos str_move std::endl; //直接初始化 my_string str_move1 std::move(str_move);std::cout \nstr_move1 str_move1 std::endl;//std::cout \nstr_move str_move std::endl;//赋值构造my_string str_cp str_move1;std::cout \nstr_move1 str_move1 std::endl;std::cout \nstr_cp str_cp std::endl; //赋值初始化 my_string str_cp_by_operator;my_string str_move_by_operator;str_cp_by_operator str_cp;std::cout \nstr_cp_by_operator str_cp_by_operator std::endl;std::cout str_cp str_cp std::endl;str_move_by_operator std::move(str_cp);std::cout \nstr_move_by_operator str_cp_by_operator std::endl;if (str_cp.c_str() ! nullptr){std::cout str_cp str_cp std::endl;}if (str_cp_by_operator str_move_by_operator){printf(\n operator is success! \n);}else{printf(\n operator is failed! \n);}my_string add str_cp_by_operator str_move_by_operator;std::cout add add std::endl;printf(please input str:);std::cin str;std::cout os str std::endl;return 0; }3.4结合结果分析
http://www.dnsts.com.cn/news/100600.html

相关文章:

  • 公司互联网站全面改版网络建站优化科技
  • 网站内容建设总结个人网站做捐赠发布违法吗
  • 网站建设企业有哪些重庆梁平网站建设哪家便宜
  • 工信和信息化网站备案系统温州网站制作哪家好
  • 商务网站规划与建设课程设计企业做网站怎么做
  • 做长页网站装饰设计公司属于什么行业
  • 网站可以叫做系统吗河北百度seo关键词排名
  • 做电影网站能赚钱吗免费图片网站建设
  • 微信网页版登录界面唐山seo排名外包
  • 做简历的网站安装网站程序
  • 信阳建设网站网站备案技巧
  • 包装材料网站建设安徽省建设工程信网站
  • 中国百强城市榜单公布杭州seo俱乐部
  • 响应式网站的概念网站运营与维护是什么
  • 网站建设类百度浏览器官网入口
  • 有域名了建立免费网站广州做网站的
  • 个人引擎网站什么做沈阳网站开发培训
  • 泉州教育网站抖音代运营服务内容及合作套餐
  • 网站开发语音占比基于windows搭建wordpress
  • 网站图片上传却不显示不出来seo是什么部门
  • 成都创新互联网站建设网站报价方案
  • 北京响应式的网站设计买域名送网站空间
  • 买个网站多少钱改网站标题
  • 展示网站动画怎么做的佛山网站制作流程
  • 美容院网站建设方案书开发公司未售的空置房物业费
  • 做餐饮网站建设余姚网络推广
  • 网站建设公司长沙好的界面建筑网站
  • 吉利汽车网站开发环境分析seo最新优化技术
  • openwrt 做视频网站合肥做网站yuanmus
  • 2017做网站挣钱吗做网站新科网站建设