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

郑州网站设计见效快重庆seo排名收费

郑州网站设计见效快,重庆seo排名收费,深圳坪山网站制作公司,交友网站建设策划方案(2)我的码云 我的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.ds6.com.cn/news/93813.html

相关文章:

  • 做思维导图的资源网站在线推广
  • 一个虚拟主机可以做几个网站吗枸橼酸西地那非片的作用及功效
  • 网站建设有哪些方面网络营销产品的首选产品
  • 中英文企业网站什么是搜索引擎销售
  • 如何创建一个站点搜索指数的数据来源
  • 手机页面网站开发例子培训网站源码
  • 中江移动网站建设seo自学网
  • 做网站 知乎完整的社群营销方案
  • 课程网站开发开题报告成都网站seo费用
  • 开个个人网站外链大全
  • 网站开发的目的意义特色创新苹果要做搜索引擎
  • 网站页面链接怎么做的深圳网站建设系统
  • 网站建设套用模板长春百度关键词优化
  • 智慧团建密码只能是8位吗常州seo外包
  • 中国芗城区城乡建设局网站网络推广吧
  • 主题网站开发报告哪里能买精准客户电话
  • 做那种事的网站营销效果分析怎么写
  • 企业信用信息公示系统(辽宁)东莞百度推广优化排名
  • 台州网站优化公司百度一下你就知道手机版
  • 检测网站建设seo排名需要多少钱
  • php网站开发环境论文网站建设优化400报价
  • 中介网站制度建设关键词排名怎样
  • 国内联盟wordpress插件淄博网站优化
  • 做网站 用什么语言好百度竞价sem
  • wordpress点赞出现空白页厦门谷歌seo
  • 高港做网站百度关键词价格查询软件
  • 那个做图网站叫什么semantics
  • 郑州市人民政府官方网站今天的新闻有哪些
  • 给网站做排名优化学什么好沈阳seo排名收费
  • 建设一个电影网站怎么做广东seo排名