最近想学习一下C++ STL中容器类的实现,就先研究最简单的string容器类,通过学习简单的,达到管中窥豹,举一反三的目的,话不多说,直接来干货,写得不好,望大家多多交流和指教。
代码如下:
<span style="font-size:18px;">// MyString.cpp : 定义控制台应用程序的入口点。
//
/*****************************************
**功能:自己实现C++ STL的string容器类
**作者:谢凡凡
**时间:2015-07-21 02:20
*****************************************/
#include "stdafx.h"
#include <iostream>
#include <iomanip> //后边用到函数setw设置域宽,所以包含该头文件
using namespace std;
//自己尝试写的一个string容器类
class MyString
{
friend ostream& operator<<(ostream&,MyString&); //输出运算符重载,友元函数
friend istream& operator>>(istream&,MyString&); //输入运算符重载
public:
MyString(const char* str = NULL); //默认构造函数,含有一个默认参数
MyString(const MyString& other); //拷贝构造函数,拷贝了数据,所以说深拷贝
MyString& operator=(const MyString& other); //重载赋值运算符
MyString operator+(const MyString& other) const; //重载加号运算符
bool operator==(const MyString& ); //operator==
bool operator<(const MyString& ); //operator<
char& operator[](int); //operator[]
size_t size() {return strlen(m_data);}
MyString& append(const MyString& other); //在尾部插入
MyString& insert(unsigned int ipos,const char *); //任意位置插入
MyString& replace(unsigned int ipos,unsigned int num,const char *); //替换操作
MyString& erase(unsigned int start,unsigned int final); //删除函数
int find(const char* stem,int ipos = 0); //查找函数
int find_first_of(const char* stem,int ipos = 0); //查找字符串中第一个在指定串中出现的字符位置
int rfind(const char *stem,int ipos = -1); //反向查找,从左往右数ipos位做为起始的位置,然后从右往左匹配,找到第一个返回位置
int npos; //查询标志 表示字符串查询失败
//下边写迭代器类
class Iterator
{
char *init;
public:
inline Iterator(char* init) {this->init = init;} //构造函数
inline bool operator!=(Iterator& it) {return this->init != it.init;} //迭代器的几个运算符重载
inline void operator++(int){init = init + 1;}
inline char operator*() {return *init;}
};
char* Begin() {return m_data;} //获得迭代器的起始位置
char* End(){return m_end;} //获得迭代器的尾后位置
~MyString();