C++ 之 string类的模拟实现

C++ 之 string类的模拟实现_第1张图片

这学习我有三不学

昨天不学,因为昨天是个过去

明天不学,因为明天还是个未知数

今天不学,因为我们要活在当下,我就是玩嘿嘿~

–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀-正文开始-❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–

目录

一、string类的模拟实现

1.成员函数(Member functions)

1.1 构造函数(constructor)

1.2 析构函数(destructor)

1.3 赋值拷贝函数(operator=)

2.迭代器(iterators)

3.容量(Capacity)

4.元素访问(Element access)

5.调节器(Modifiers)

6.字符操作(String operation)

7.成员常量(Member constant)npos实现

8.非成员函数重载(Non-member function overload)

二、完结撒❀


前言:

模拟string类的实现对于我们学习认识string类会有更加深刻的理解,还没学过string类的老铁建议可以先看学习一下我的上一篇博客讲解:C++ 之 string类 详细讲解,再来进行模拟实现。

一、string类的模拟实现

在上篇博客中讲解了string类的常用接口,这篇博客带大家模拟实现一下string类的一些常用接口。

string类查阅文档

我们根据上面文档所规划的接口分类为大家进行部分模拟实现,大家可以先简单看一下上面文档。

1.成员函数(Member functions)

1.1 构造函数(constructor)

● 无参构造函数 string() 实现:

string()
	//:_str(nullptr)
	:_str(new char[1])//不能赋空指针,因为直接c_str会出错
	, _size(0)
	, _capacity(0)
{
	_str[0] = '\0';
}

有参(字符串)构造函数 string(const char* str = "") 实现:

//string(const char* str = nullptr)错
//string(const char* str = '\0')错
string(const char* str = "")//常量字符串默认结尾含有\0
//该构造函数可以替代上面无参构造函数
	:_size(strlen(str))
{
	_capacity = _size;
	_str = new char[_capacity + 1];
	strcpy(_str, str);
}

● 拷贝构造函数 string (const string& s) 实现:
 

//s2(s1)
string (const string& s)
{
	_str = new char[s._capacity+1];//完成深拷贝,+1 存放\0使用
	strcpy(_str, s._str);
	_size = s._size;
	_capacity = s._capacity;
}

1.2 析构函数(destructor)

● ~string()实现:

~string()
{
	delete[] _str;
	_str = nullptr;
	_size = _capacity = 0;
}

1.3 赋值拷贝函数(operator=)

● operator=实现:

	//s2 = s1
	string& operator=(const string& s)
	{
		char* tmp = new char[s._capacity + 1];//多开辟的1个空间用来存储\0
		strcpy(tmp, s._str);
		delete[] _str;
		_str = tmp;
		_size = s._size;
		_capacity = s._capacity;

		return *this;//支持连续赋值
	}

2.迭代器(iterators)

你可能感兴趣的:(C++篇,c++,开发语言,经验分享,学习,其他,笔记)