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)

相关推荐

  • Java集合框架之如何使用Stack Queue Deque

    技术Java集合框架之如何使用Stack Queue Deque本篇内容主要讲解“Java集合框架之如何使用Stack Queue Deque”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编

    攻略 2021年10月25日
  • 如何解决JVM空闲堆内存不释放回OS的问题

    技术如何解决JVM空闲堆内存不释放回OS的问题今天就跟大家聊聊有关如何解决JVM空闲堆内存不释放回OS的问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JDK

    攻略 2021年10月23日
  • 怎么通过Java代码来理解RPC

    技术怎么通过Java代码来理解RPC本篇内容主要讲解“怎么通过Java代码来理解RPC”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么通过Java代码来理解RPC”吧!这整

    攻略 2021年11月15日
  • 走之旁是几画,左边的“边”走之旁是几划

    技术走之旁是几画,左边的“边”走之旁是几划一、走之旁有三画走之旁是几画,拼音是chuò ,同“辵”。用作偏旁。俗称“走之旁”,简称“走之”。;二、走之旁的字有进、还、过、边、远、选、连、逃、运、这、遇、遍、追、速、送、道

    生活 2021年10月26日
  • C语言const用法概述

    技术C语言const用法概述 C语言const用法概述const概念
    有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定。例如,用一个变量来表示班级的最大人数,或者表示缓冲区的大

    礼包 2021年12月6日
  • Spring Cloud中如何断路器聚合监控

    技术Spring Cloud中如何断路器聚合监控Spring Cloud中如何断路器聚合监控,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一

    攻略 2021年10月27日