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)

相关推荐

  • 嵌入式数据库Sqlite3之如何使用基本的命令操作

    技术嵌入式数据库Sqlite3之如何使用基本的命令操作这篇文章主要介绍“嵌入式数据库Sqlite3之如何使用基本的命令操作”,在日常操作中,相信很多人在嵌入式数据库Sqlite3之如何使用基本的命令操作问题上存在疑惑,小

    攻略 2021年10月22日
  • sqlite怎么使用子查询函数(sqlite select语句)

    技术SQLite中的SELECT子句如何使用通配符小编给大家分享一下SQLite中的SELECT子句如何使用通配符,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!SQLite中的SELECT子句使用通配符

    攻略 2021年12月18日
  • 抖音刷赞软件,实惠的刷赞软件

    技术抖音刷赞软件,实惠的刷赞软件免费刷抖音赞软件,抖音怎么刷点赞上热门?关于抖音刷赞、抖音怎么刷赞等相关问题,于是去网上输入”抖音刷赞”,哇~不搜不知道一搜吓一跳,网上出现:抖音刷赞|抖音怎么刷赞|抖音刷赞上热门|抖音快

    测评 2021年10月19日
  • iOS如何实现横竖屏幕设定

    技术iOS如何实现横竖屏幕设定小编给大家分享一下iOS如何实现横竖屏幕设定 ,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!iOS 6以下横竖屏

    攻略 2021年10月21日
  • 抽油烟机品牌大全,抽油烟机什么牌子好用又实惠

    技术抽油烟机品牌大全,抽油烟机什么牌子好用又实惠⭐⭐⭐老梁谈家居抽油烟机品牌大全,每天都会更新关于装修的知识,关注、点赞、评论、私信,各种家居干货在等你⭐⭐⭐吸油烟机是每家每户必备的厨房电器,好的吸油烟机可以把炒菜过程当

    生活 2021年10月28日
  • 变脸是什么剧,究竟什么样的脸才称得上剧抛脸

    技术变脸是什么剧,究竟什么样的脸才称得上剧抛脸我觉得剧抛脸可以提名任嘉伦变脸是什么剧。所谓的剧抛脸就是同一个演员,他在演任何一部戏的时候没有他本人的影子。也没有他上一部作品的影子,演的就是这部作品中的角色。每演一部作品不

    生活 2021年10月29日