c++基础编程:实现常用数据结构或功能

本文介绍如何在C++中为自定义类实现赋值运算符重载,通过具体示例MyString类展示了正确的实现方式,避免内存泄漏等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1.给定一个数据类型,写它的赋值运算符重载函数:

例如:实现String

class MyString
{
public:
	MyString(char *data = nullptr);
	MyString(const MyString &str);
	~MyString();
private:
	char * myData;
};
MyString& MyString::operator =(const MyString &str) //赋值运算符
{
	//关注点:1.需要返回引用,才能实现连续赋值 2.参数需要是常量引用,否则参数会调用一次复制构造函数
	//3.需要释放掉实例原有的内存,否则会出现内存泄露
    //4.如果传入的参数和实例相同,则无需赋值,直接返回即可
	if (this != &str)
	{
		MyString temp(str); //通过临时变量实现赋值 ,局部变量自动释放内存//这样做的好处是万一碰到内存不够的场景,就直接退出函数报错了
		//而普通的做法是先释放实例占用内存,再赋值,遇到内存不够的情况会导致原有的实例也丢失了。
		char *pTemp = temp.myData;
		temp.myData = myData;
		myData = pTemp;
	}
	return *this;
}

 

例如:实现Vector

 

内含资源如下: 1.基本数据结构 1.1.Array ........... 动态数组 1.2.LinkedList ... 链表 1.3.BST .............. 二分搜索树 1.4.MapBST ..... 二分搜索树(用于实现映射) 1.5.AVLTree ...... AVL树 2.接口 2.1.Queue ........... 队列接口 2.2.Stack .............. 栈接口 2.3.Set .................. 集合接口 2.4.Map ............... 映射接口 2.5.Merger .......... 自定义函数接口 2.6.UnionFind ..... 并查集接口 3.高级数据结构 3.1.ArrayQueue .......................... 队列_基于动态数组实现 3.2.LinkedListQueue .................. 队列__基于链表实现 3.3.LoopQueue ........................... 循环队列_基于动态数组实现 3.4.PriorityQueue ....................... 优先队列_基于最大二叉堆实现 3.5.ArrayPriorityQueue ............. 优先队列_基于动态数组实现 3.6.LinkedListPriorityQueue ..... 优先队列_基于链表实现 3.7.ArrayStack ............................. 栈_基于动态数组实现 3.8.LinkedListStack ..................... 栈_基于链表实现 3.9.BSTSet ..................................... 集合_基于二分搜索树实现 3.10.LinkedListSet ....................... 集合_基于链表实现 3.11.BSTMap ................................ 映射_基于二分搜索树实现 3.12.AVLTreeMap ....................... 映射_ 基于AVL树实现 3.13.LinkedListMap .................... 映射_基于链表实现 3.14.MaxHeap ............................. 最大二叉堆 3.15.SegmentTree ...................... 线段树 3.16.Trie ......................................... 字典树 3.17.QuickFind ............................ 并查集_基于数组实现 3.18.QuickUnion ......................... 并查集_基于树思想实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

溯夜流云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值