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)

相关推荐

  • 香辣鱼片的家常做法,香辣鱼条的简单做法是什么

    技术香辣鱼片的家常做法,香辣鱼条的简单做法是什么我是刘涛美食,感谢邀请香辣鱼片的家常做法。到超市去买那种袋装的龙利鱼,又没有刺,容易新手操作,而且那种鱼的口感特别嫩,又没有什么腥味。我来说下最简单又实用的操作方法:
    1:

    生活 2021年10月26日
  • 1公斤水等于多少升水,100升水等于多少公斤水

    技术1公斤水等于多少升水,100升水等于多少公斤水一百升水等于200斤1公斤水等于多少升水。 1升水就是1公斤,所以100升水就是100公斤,1公斤等于两斤,所以100升水就是200斤。 千克是公制计量单位,一千克等于一

    生活 2021年10月25日
  • 好看的小黄片,这什么软件做的小黄鸭子

    技术好看的小黄片,这什么软件做的小黄鸭子材料鸭子半只核桃适量卤料包好看的小黄片:八角3个桂皮一段草果1个花椒适量桂叶5片或者月桂叶1干辣椒3个姜一块大葱糖老抽生抽料酒做法
    1鸭子洗净,用盐和料酒腌1个小时,或者用红糟和盐

    生活 2021年10月25日
  • 抖音刷粉自动,抖音刷粉丝安全码?

    技术抖音刷粉自动,抖音刷粉丝安全码?现在抖音用户早已经达到数亿,在抖音当中有一个超火的功能,那就是抖音双击,也叫抖音赞,这个赞的数量越多,说明作品热度越高,越容易上推荐。那么抖音如何才能在线刷赞呢?这种刷赞平台有多少?哪

    测评 2021年10月19日
  • java中的迭代器模式怎么实现

    技术java中的迭代器模式怎么实现小编给大家分享一下java中的迭代器模式怎么实现,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!迭代器模式迭代

    攻略 2021年11月17日
  • 24Django装饰器整体缓存的一种玩法

    技术24Django装饰器整体缓存的一种玩法 24Django装饰器整体缓存的一种玩法一,Django设置缓存的三种类型:#将数据缓存到表里
    CACHE={'default':{'BACKEND':'d

    礼包 2021年12月6日