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

浙江同安建设有限公司网站怎么区分网站的好坏

浙江同安建设有限公司网站,怎么区分网站的好坏,邯郸电商设计,天津关键词搜索排名我的码云 我的string码云 分析总结 1.项目结构 所有的类和函数需要在namespace中实现&#xff0c;要和string高度对应 private:char* _str;//字符串size_t _size;//有效长度size_t _capacity;//总空间&#xff0c;包括\0const static size_t npos-1;2.定义变量 <1> 所…

我的码云

我的string码云

分析总结

1.项目结构

所有的类和函数需要在namespace中实现,要和string高度对应

	private:char* _str;//字符串size_t _size;//有效长度size_t _capacity;//总空间,包括'\0'const static size_t npos=-1;
2.定义变量

<1> 所有的变量和函数要放到class中,而且要规定private类型
<2> 其中有一个是特殊的,const static size_t npos=-1;这是需要特别记忆,size_t npos赋值为-1,表示无符号整形的最大值
对于长度和总空间一定不会是小于0的,我们依旧设为无符号整形

3.调试代码区域

因为这是在namespace中实现的,我们调试代码可以需要加上using namespace或者直接在namespace中写一个调试函数
在这里插入图片描述

4.构造函数
		string():_str(new char[sizeof(char)*4]),_size(0),_capacity(4){_str[0] = '\0';}

对象初始化的时候,我们首选初始化列表进行初始化(效率更高),并且我们在初始化列表中,为了防止别人随便改变变量定义的顺序,导致初始化列表错乱,我们会选择在函数中进行初始化。(初始化列表的初始化顺序并不是根据列表中数据出现的顺序决定的,而是由定义的顺序决定的)

		string(){_size = 0;_capacity = 4;_str = new char[_capacity];_str[0] = '\0';}

在初始话的时候还要注意变量的值要选取合适,并且要注意字符串的结尾不论是有没有字符串都应该为'\0'

拷贝构造和析构函数
string(const string& other)
{_size = other._size;_capacity = other._capacity;_str = new char[sizeof(char) * _capacity];strcpy(_str, other._str);
}~string()
{delete[] _str;
}

代码中char数组需要设为动态的空间,要进行深拷贝防止浅拷贝带来的问题
拷贝构造中要注意加const防止传来的是匿名对象匿名对象有常性,需要const修饰才行,对于重载=也是需要加const

重载运算符
类内friend ostream& operator<<(ostream& out, string& str);friend istream& operator>>(istream& in, string& str);类外ostream& operator<<(ostream& out, string& str){cout << str.c_str();return out;}istream& operator>>(istream& in, string& str){cin >> str._str;return in;}

等我回来再叙述iostream

因为这个是<<和>> 必须要在类外实现,并且要调用类中private成员变量,我们必须使用friend标识符
我在<<调用的c_str()函数也就是说,我们的<<可以不用再类内声明成friend
也就是说,只有在需要调用类中的变量的时候才需要写成friend

迭代器
简单介绍

1.using namespace 的情况下

	string::iterator it=str.begin();

2.没有使用using namespace 的定义形式

	bit::string::iterator tem;

既要指明namespace又要指明class

实现

iterator是一个类型,他定义了it,it接收了begin()的返回值,it要对char数组进行访问,而且要能通过it自增进行连续的访问,那么it就应该是指针类型char*,同时又要写成iterator的形式,就需要进行typedef

		typedef char* iterator;//必须要将这个定义放出来,不然类外就无法使用声明iterator begin(){return _str;}iterator end(){return _str + _size + 1;}

在写end函数的时候一定要清楚,end指向的是整个数组结尾的下一个位置
typedef char* iterator;这个定义一定要放到public中,不能放到private中,因为在外面进行定义迭代器的时候需要访问到iterator这个类型

::作用域操作符,可以对类内public静态成员变量和函数进行访问,以及上面这种类型进行访问

reserve和resize
		void resize(size_t n, char c = '\0'){delete[] _str;_str = new char[sizeof(char) * (n + 1)];_size = n;_capacity = n + 1;for (int i = 0; i < n; i++)_str[i] = c;_str[n] = '\0';}
		void reserve(size_t all){int flag = 0;while (all >= _capacity)_capacity *= 2, flag = 1;if (flag){char* tem = _str;_str = new char[_capacity];strcpy(_str, tem);}}

reserve如果是缩小的话,不影响空间,不影响数据
resize如果是缩小的话,影响空间,影响数据

substr
		string substr(size_t start=0, size_t n=npos) const{string ans;//临时变量,不能返回引用if (start >= _size) return ans;for (int i = start; i < start + n && i < _size; i++)ans.push_back(_str[i]);return ans;}

在使用substr的时候,string ans;是临时变量,不能返回引用,虽然string内部的数组是动态开辟的,但是函数结束的时候,就会自动调用析构函数释放空间

http://www.yayakq.cn/news/24404/

相关文章:

  • 用enfold做的网站上传文件到网站根目录
  • 专业郑州网站建设专业网站建设现状及对策研究
  • 深圳做网站哪里最好专业手机网站建设平台
  • 免费的海报设计网站电商网站布局设计
  • 网站开发 国际网站一个品牌的策划方案
  • 电商网站构建预算方案网站建设的开发语言
  • 网站开发教程视频百度云资源重庆九龙坡区最新消息
  • 零基础网站建设视频做书的网站有哪些
  • 网站主机一个g网站做营销推广公司
  • 中山网站开发公司网页制作框架教程
  • 做ppt网站合肥app建设
  • 企业网站建设原则是用个人电脑做网站的步骤
  • 淘宝的电子商务网站的建设代码
  • 做画册好的网站织梦cms怎么更改网站的路径
  • 大连仟亿科技网站建设公司 概况12333上海公共招聘网官网
  • asp.net网站后台源码浙江建设职业技术学院
  • 自己怎么做团购网站首页泉州建设系统培训中心网站
  • 广州致格广告有限公司网站建设旅游网站缺点
  • 网站开发合同违约责任网络运营可以自学吗
  • 那个网站做外贸最好wordpress替换表情变小
  • 做网站怎么建文件夹织梦和wordpress哪个好
  • 网站维护具体做啥如何对现有的网站改版
  • 做网站找模板去哪好建设网站要多久的时间
  • 大一学生做的网站网站优化北京
  • IT男网站建设网站怎么不要钱自己做
  • 广元建设机械网站创意设计与制作
  • 网站后台管理的超链接怎么做常见软件开发模型有哪些
  • 装修网站是怎么建设的网站工程师培训学校
  • 扬州外贸网站seo何炅做的网站广告
  • 中国建设网站用户名wordpress 三栏主题