c++|string模拟实现

 

目录

一、string.h

二、string.cpp

三、Test.cpp


对string的各种接口进行一个简易版的模拟实现,在模拟实现完之后对string的底层实现有了进一步的理解,了解大佬的编程写法思路。也算是对string有了一个小总结。

一、string.h

接口的声明。放在.h文件中 

#include <iostream>
#include <string>
#include <assert.h>
using namespace std;


namespace bit
{

	class string
	{
	public:
		typedef char* iterator;//迭代器本质上就是指针
		typedef const char* const_iterator;


		iterator begin() const
		{
			return _str;
		}


		iterator end()
		{
			return _str + _size;
		}
		const_iterator end() const
		{
			return _str + _size;
		}

		string(const char* s = "");


		string(const string& s);


		string& operator=(string s);

		~string();


		void push_back(char c);


		string& operator+=(char c);
		string& operator+=(const string& s);

		string& operator+=(const char* str);

		void append(const char* str);


		void clear();


		void swap(string& s);

		const char* c_str()const;

		//capacity
		size_t size();

		size_t capacity();

		void resize(size_t n, char c = '\0');

		void reserve(size_t n);

		bool empty()const;



		bool operator<(const string& s);

		bool operator<=(const string& s);

		bool operator>(const string& s);

		bool operator>=(const string& s);

		bool operator==(const string& s);
		;
		bool operator!=(const string& s);

		char& operator[](size_t i);

		const char& operator[](size_t i) const;


		//返回字符第一次在字符串出现的位置
		size_t find(char c, size_t pos = 0) const;
		;
		//在pos位置插入字符c
		string& insert(size_t pos, char c);

		//在pos位置插入字符串
		string& insert(size_t pos, const char* str);


		//返回子串在字符串中出现的位置
		size_t find(const char* str, size_t pos = 0);

		string substr(size_t pos = 0, size_t len = npos);

		//	删除pos位置上的元素,并返回该元素的下一个位置

		string& erase(size_t pos, size_t len = npos);


	private:

		size_t _size;
		size_t _capacity;
		char* _str;

		//静态变量可以赋值处理的前提是有const修饰,这个可以看作是编译器的特殊处理,只能适用于整形家族
		static const size_t npos = -1;

	};
	ostream& operator<<(ostream& out, const string& s);
	istream& operator>>(istream& in, string& s);
}

二、string.cpp

接口的各种实现。进行声明定义分离时,要注意格式上的变化,指定类域,声明和定义中,只有声明中可以给缺省值,定义中不能给。string的构造函数有传统写法和现代写法,现代写法更简洁,但和传统写法本质上没有太大的区别

#include "string.h"


names
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值