自己写了一个c++ string类!!!

爱读庄子的码农 2015-06-29 09:43:45
自己写了一个c++ string类!!!准确的说是实现了一个basic_string类,效率上不输标准库!!!
望高手批评指正!!!

http://blog.csdn.net/focusing_on_cpp/article/details/46678151
...全文
338 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
spaceman10 2015-06-29
  • 打赏
  • 举报
回复
对比stl里string的源代码不就可以了
  • 打赏
  • 举报
回复
下面是部分代码!!!具体的看我的博客!!!
  size_type size() const throw()   
    { //按照标准文档的要求,不抛出异常,以下同理可得,不再赘述!  
        return finish - start;  
    }  
    size_type length() const throw()  
    {  
        return size();  
    }  
    size_type max_size() const  throw()  
    {  
        return size_type(-1) / sizeof(value_type) - 1;  
    }  
    size_type capacity() const throw()  
    { //这里的计算本来不应该减 1 的,有意这样做是为了确保留有一个字符的空间(包括宽字符),方便做  
         // C风格字符串的转换,写入空字符,用于成员函数c_str()  
        return end_of_storage - start - 1;  
    }  
    bool empty() const throw()  
    {  
        return start == finish;  
    }  
    iterator begin() throw()  
    {  
        return iterator(start);  
    }  
    const_iterator begin() const  throw()  
    {  
        return const_iterator(start);  
    }  
    iterator end()  throw()  
    {  
        return iterator(finish);  
    }  
    const_iterator end() const throw()  
    {  
        return const_iterator(finish);  
    }  
    reverse_iterator rbegin()  throw()  
    {  
        return reverse_iterator(end());  
    }  
    const_reverse_iterator rbegin() const throw()  
    {  
        return const_reverse_iterator(end());  
    }  
    reverse_iterator rend()  throw()  
    {  
        return reverse_iterator(begin());  
    }  
    const_reverse_iterator rend() const  throw()  
    {  
        return const_reverse_iterator(begin());  
    }  
    reference operator [] (size_type n)  throw()  
    {  
        assert(n < size());  
        return *(start + n);  
    }  
    const_reference operator [] (size_type n) const throw()  
    {  
        assert(n < size());  
        return *(start + n);  
    }  
    reference at(size_type n)   
    {  
        if(n < size())  
            return *(start + n);  
        else  
            throw std::out_of_range("invalid string position");  
    }  
    const_reference at(size_type n) const   
    {  
        if(n < size())  
            return *(start + n);  
        else  
            throw std::out_of_range("invalid string position");  
    }  
    allocator_type get_allocator() const throw()  
    {  
        return allocator_type();  
    }  
  • 打赏
  • 举报
回复
引用 9 楼 momollll 的回复:
支持一下楼主的学习精神,不过有的人短跑牛逼,有的人长跑牛逼,我想库应该也是吧。
有道理!
  • 打赏
  • 举报
回复
引用 10 楼 tiannailu 的回复:
不明觉厉
tiannailu 2015-06-29
  • 打赏
  • 举报
回复
不明觉厉
momollll 2015-06-29
  • 打赏
  • 举报
回复
支持一下楼主的学习精神,不过有的人短跑牛逼,有的人长跑牛逼,我想库应该也是吧。
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
无profiler不要谈效率!!尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代!
赵老师说的话就是高大上,学习了!
  • 打赏
  • 举报
回复
引用 6 楼 daiweifeng 的回复:
纯粹作为容器的string类,效率一般不是问题,就是快1倍也意义不大吧。string相关的算法的效率比较重要啊。
引用 6 楼 daiweifeng 的回复:
纯粹作为容器的string类,效率一般不是问题,就是快1倍也意义不大吧。string相关的算法的效率比较重要啊。
部分同意,
超级能量泡泡 2015-06-29
  • 打赏
  • 举报
回复
纯粹作为容器的string类,效率一般不是问题,就是快1倍也意义不大吧。string相关的算法的效率比较重要啊。
赵4老师 2015-06-29
  • 打赏
  • 举报
回复
无profiler不要谈效率!!尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代!
aksufign 2015-06-29
  • 打赏
  • 举报
回复
哇,膜拜一下,我也刚写好一个string类,只能支持char 和wchar_t 类型的。 楼主,我先看看你的,多交流。
  • 打赏
  • 举报
回复
引用 2 楼 spaceman10 的回复:
对比stl里string的源代码不就可以了
设计思路不一样啊!!!

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧