string类及其简单模拟实现

一.string类
1.string是表示字符串的类。该类的接口与常规容器基本相同,再添加了一些专门用来操作字符串的操作。
二.string类常见的对象构造
1.string():构造空的字符串。
2.string(const char *s):用c-string来构造string类对象
3.string (const string &s):拷贝构造函数
三.string类常用操作
1.s+t:将串s和t拼接为一个新串
2.s=t:用t更新s
3.s==t:判断s和t是否相等
4.s!=t:判断s和t是否不等
6.s[i]:访问下标为i的字符
四.输入整行字符串
1.getline可以输入整行字符串(需包含string头文件)
如:getline(cin,s2)
2.getline可以有第三个参数,用来做字符串的结束标志符。
五.string类对象常用的容量操作
1.size:返回数组的长度
2.empty:检测字符串释放为空串,是返回true,否返回false
3.clear:清空有效字符
4.reserve:为字符串预留空间
5.resize:将有效字符的个数改为n个,多出来的用字符c填充
六.浅层复制与深层复制
1.浅层复制:实现对象间元素的一一对应的复制。
在这里插入图片描述
浅层复制相当于把数组1的指针的内容和size的值原样搬到数组2,同时数组1和数组二的指针指向同一片地址即同一个数组单元,其数组元素本身没有被复制,只是把地址复制了。所以在析构数组1时已经把这片内存单元释放了,在析构数组2时又会delete一遍,就会发生出错。
2.深层复制:当被复制的对象为指针类型时,不是复制该指针成员本身,而是将指针所指的元素进行复制
在这里插入图片描述
这里将数组一的size复制到了数组2,但points没有复制。数组2的points指向了新开辟了一片空间,然后将数组一的元素复制到数组2.
七.string类的简单模拟实现(构造函数,拷贝构造函数,赋值运算符重载,析构)

class string
{
public:
	string(const char *str = "")//:构造函数
	{
		if (str == nullptr)
		{
			str = "";
		}
		Str = new char[strlen(str) + 1];
		strcpy(Str,str);
	}
	void swap(char *a, char* b)
	{
		char s;
		s = *a;
		*a = *b;
		*b = s;
	}
	//:拷贝构造函数
	string::string(const string &s)
		:Str(new char[strlen(s.Str) + 1])
	{
		strcpy(Str, s.Str);
	}
	//:赋值运算符重载
	string& operator=(const string& s)
	{
		swap(Str, s.Str);
		return *this;
	}
	//:析构
	~string()
	{
		if (Str)
		{
			delete[] Str;
			Str = nullptr;
		}
	}
private:
	char* Str;
};
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值