C++·拾点五——string类模拟

         当得此景。

目录

string

string类框架

iterator(迭代器)

modify(修改操作)

capacity(容量操作)

access(访问操作)

relational operators(关系操作)

find(寻找)

insert(插入)

erase(删除)

小知识

string

简介:用于处理字符串,提供了一个可变长度的字符数组。

string类框架

class string
{
    char* _str;
    size_t _size;
    size_t _capacity;
public:
    typedef char* iterator;
    friend ostream& operator<<(ostream& _cout, const L::string& tmp);
    friend istream& operator>>(istream& _cin, L::string& tmp);

    string(const char* arr = "")
    {
        char* tmp = new char[strlen(arr)+1];
        assert(tmp);
        strcpy(tmp, arr);
        _str = tmp;
        _size = strlen(arr);
        _capacity = _size;
    }


    string(size_t n, char c='\0')
    {
        char* tmp = new char[n + 1];
        assert(tmp);
        memset(tmp, c, n); tmp[n] = '\0';
        _str = tmp;
        _size = n;
        _capacity = n;
    }


    string(const string& s)
        :_str(nullptr)
        ,_size(0)
        ,_capacity(0)
    {
        string tmp(s);
        swap(tmp);
    }


    ~string()
    {
        if (_str)
        {
            delete[]_str;
            _str = nullptr;
        }
    }

。。。。。。下边的函数实现

}

iterator(迭代器)

用来遍历字符串(用指针模拟,实际底层非指针,只是使用起来像指针)

 

就是这么简洁。

modify(修改操作)

 push_back()      operator+=()      append()    clear()      swap()     c_str()

capacity(容量操作)

size()     capacity()      empty()        resize()        reserve()  

access(访问操作)

operator[]        

relational operators(关系操作)

operator< > <= >= == !=

find(寻找)

find() 

insert(插入)

insert()

erase(删除)

erase()

operator <<   >>   

记得加友元

小知识

1.静态变量只在当前文件可用  ,如果头文件展开在多个源文件中,全局和静态变量都不可以定义在头文件中,否则展开时会有多份,编译时会有冲突。

2.在头文件展开时函数定义不可以有两份,声明可以。

3.有符号数和无符号数比较时,会将有符号转化为无符号比较。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值