C++ string容器类实现

     最近想学习一下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();                                 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值