c++ string类

技术c++ string类 c++ string类string类
将StrVec类的一些变量进行全局替换就能得到String类
1、string替换为char
2、str替换为c,strs替换为c
3、

c字符串类

string类

将StrVec类的一些变量进行全局替换就能得到线类

1、字符串替换为茶

2、字符串替换为c、可疑交易报告替换为c

3、服务器替换为线

4 、#包含字符串替换为# includecstring

StrVec和线就是类似的

1、都是保存指向元素的指针,指向的空间都是在内中动态分配的。

2、拷贝构造函数、拷贝赋值运算符拷贝字符串类的成员和指向的元素(拷贝赋值运算符有析构指向空间的过程)

3、析构函数都是析构指针指向的空间。

不同点:

重新分配:

StrVec:是移动原空间的数据到新空间,释放原空间的线对象,不释放线指向的茶元素(移动后原线指向的空间为nullptr)

String:移动茶后,不会释放茶

原因是StrVec有两层指向,最基础的一层是不能销毁的,否则移动到新空间的数据被销毁了(这个地方还理解不清楚)

字符串。h

#包含cstring

#包括内存

#包含实用工具//配对移动

#包含初始值设定项_列表//初始值设定项_列表

#包含算法//对于每一个

#ifndef STRVEC__H

#定义STRVEC__H

使用命名空间标准;

类别字符串{ 0

公众号:

String():b(nullptr),e(nullptr),cap(nullptr){}

字符串(const char *);

字符串(常量字符串);

字符串(字符串);

字符串运算符=(常量字符串);

字符串运算符=(字符串);

~ String();

void push _ back(const char);

size _ t size()const { return e-b;}

size _ t capacity()const { return cap-b;}

void reserve(const size _ t);

void resize(const size _ t);

void resize(const size_t,const char);

char * begin()const { return b;}

char * end()const { return e;}

私人:

静态allocatorchar alloc

void chk _ n _ alloc(){ if(size()==capacity())recall();}

pairchar*、char* alloc_n_copy(const char*、const char *);

void free();

void recall();

char * b;

char * e;

char * cap

}

#endif

String.cpp

#包括"字符串。h "

//静态成员变量定义和默认初始化。

//静态成员变量不属于任何对象,不能在类的构造函数中被构造和初始化,必须在类的外部定义和初始化

//不要重复写静电

//静态函数可以在类内部定义(没有初始化一说)

alloctorchar字符串: alloc

字符串:字符串(常量初始值设定项_列表字符c){ 0

auto p=alloc_n_copy(c.begin()、c . end());

b=p.first

e=cap=p秒;

}

字符串:字符串(常量字符* c){ 0

auto p=alloc_n_copy(c,c strlen(c));

b=p.first

e=cap=p秒;

}

pairchar*,char * string : alloc _ n _ copy(const char * b _ ptr,const char * e _ ptr){ 0

自动p=alloc。分配(e _ ptr-b _ ptr);

返回{p,未初始化的_copy(b_ptr,e_ptr,p)};

}

void字符串: free(){ 0

如果(e){ 0

for(auto p=e;p!=b;)

alloc。销毁(-p);

alloc。democrate(cap-b);

}

}

void字符串: reca pile(){ 0

size _ t新容量=size()2 * size(): 1;

自动p=alloc。分配(新容量);

自动dst=p;

auto src=b;

for(size _ t I=0;我!=size();(一)

alloc.construct(dst,STD : move(* src));

b=p;

e=dst//p size();

cap=p新容量

}

字符串:字符串(常量字符串)

auto p=alloc_n_copy(s.begin()、s . end());

b=p.first

e=cap=p秒;

}

String:String(字符串s):b(s.b),e(s.e),cap(s.cap) {//要修改s的内部成员,所以不能为常数

s。b=s . e=s . cap=nullptr

}

字符串:运算符=(常量字符串)

auto p=alloc_n_copy(s.begin()、s . end());

free();

b=p.first

e=cap=p秒;

}

字符串:3360运算符=(字符串){//要修改s的内部成员,所以不能为常数

如果(这个!=s){ 0

free();

b=s.b

e=s.e

cap=s.cap

s。b=s . e=s . cap=nullptr

}

返回*这个;

}

字符串: ~字符串(){ 0

free();

}

空字符串: push _ back(const char c){ 0

chk _ n _ alloc();

alloc.construct(e,c);

}

void字符串:调整大小(const size _ t n){ 0

if(n容量()){ 0

自动p=alloc。分配(n);

自动dst=p;

auto src=b;

size _ t I=0;

for(;我!=size();(一)

alloc.construct(dst,STD : move(src));

for(;我!=n;(一)

alloc。施工(dst);

free();

b=p;

e=cap=dst

} else if(n size()){ 0

而(东b北)

alloc。建构(e);

} else {

而(东b北)

alloc。销毁(-e);

}

}

void字符串:调整大小(const size _ t n,const char c){ 0

if(n容量()){ 0

自动p=alloc。分配(n);

自动dst=p;

auto src=b;

size _ t I=0;

for(;我!=size();(一)

alloc.construct(dst,STD : move(src));

for(;我!=n;(一)

alloc.construct(dst,c);

free();

b=p;

e=cap=dst

} else if(n size()){ 0

而(东b北)

alloc.construct(e,c);

} else {

而(东b北)

alloc。销毁(-e);

}

}

void字符串: RESERVE(const size _ t n){ 0

如果(容量)(n){ 0

自动p=alloc。分配(n);

自动dst=p;

auto src=b;

for(size _ t I=0;isize();(一)

alloc.const(dst,STD : move(src));

free();

b=p;

e=dst

cap=b n;

}

}

测试代码

字符串字符串(“你好”);

适用于(const auto v : str)

coutv

coutendl

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/132078.html

(0)

相关推荐

  • C++—有限次数猜数字

    技术C++—有限次数猜数字 C++—有限次数猜数字C++ 学习循环结构小案例#includeiostream
    using namespace std;
    #includectime//随机猜数字1~100

    礼包 2021年12月2日
  • 适用于Python的编写工具有哪些

    技术适用于Python的编写工具有哪些本篇内容主要讲解“适用于Python的编写工具有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“适用于Python的编写工具有哪些”吧

    攻略 2021年11月3日
  • Linux系统中怎么使用TFTP

    技术Linux系统中怎么使用TFTP这篇文章主要讲解了“Linux系统中怎么使用TFTP”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统中怎么使用TFTP”吧

    攻略 2021年11月30日
  • 狗狗身上螨虫图片,狗狗身上的螨虫长什么样

    技术狗狗身上螨虫图片,狗狗身上的螨虫长什么样直接上图狗狗身上螨虫图片!蜱虫属于体外寄生虫,通常寄生在动物体表,由于猫狗体表有毛发,所以前期很难发现!
    幼虫和虫卵事情,体积较小,很难通过肉眼发现,它们通过吸食血液为食,成长

    生活 2021年11月1日
  • oracle数据库CPU过高问题分析

    技术oracle数据库CPU过高问题分析这篇文章主要讲解了“oracle数据库CPU过高问题分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“oracle数据库CPU过高

    攻略 2021年11月11日
  • 槟榔危害,吃槟榔最大的危害是什么

    技术槟榔危害,吃槟榔最大的危害是什么我国南方诸省居民尤其是湖南等地有嚼吃槟榔的习俗,有人趣称为“中国式口香糖”。槟榔对治疗多种肠道寄生虫病如绦虫槟榔危害、蛔虫、蛲虫等都有效,可以称之为“肠道寄生虫的克星”,其他还有诸多功

    生活 2021年10月21日