设为首页 加入收藏

TOP

string实现(一)
2017-06-17 10:22:32 】 浏览:407
Tags:string 实现

string实现

目标:

1.string接口纯虚函数类StringInterface;

2.我的ubuntu上string实现重写(但不包括写时复制);

3.一种支持小字符串优化的实现;

4.基于StringInterface的多态测试case集合;

6.多场景性能分析。

当前时间不太够,只差不多完成了1\2,先放到博客备忘,之后补上。

 

string_interface.h

 

//#define MYCODE_TEST_MODE 1
#ifndef MYCODE_STRING_INTERFACE_H
#include 
  
   
namespace mycode{
//缺点:用全部纯虚的interface不是好事,造成了string的各种实现的对应函数也是虚的,而实际上string的各种实现不应该有子类了,所以对于string指针或引用的函数调用运行时查虚函数表是不必要的浪费。
//优点:用interface可以使得接口统一且没有遗漏,并且通过多态进行测试也比较方便
//实现可以不继承全部接口,也可以继承,可以用一个定义开关MYCODE_TEST_MODE控制
//限定符,最好都加,1.简单的文档;2.防止错误的调用;3.编译器可能的优化;4.库可能的优化;5.编译器警告。这些里面1最重要。
//线程安全不考虑,异常安全按注释,提供基本及以上保证。
class StringInterface{
	public:
		static const size_t nopos = (size_t)-1;
//迭代器,假设实现全是用连续内存实现的,这样"迭代器"生成比较方便,因为迭代器兼容指针并且当作最高级的迭代器(random)	
//“长度类”接口
//位置相关函数
//操作相关
//操作符重载
//std::swap也需要加特化版本
//改变类
//析构函数
//此外,拷贝构造函数、右值拷贝构造函数,左右值赋值操作符;友元函数的输入输出也应该实现;这些貌似没法纯虚了。
//除了这个VIRTUAL StringInterface substr(size_t pos,size_t len) const noexcept(false) PUREVIRTUAL;其他还是能实现。	
#define MYCODE_STRING_INTERFACE	\
		VIRTUAL char *begin() noexcept PUREVIRTUAL;	\
		VIRTUAL char *end() noexcept PUREVIRTUAL;	\
		VIRTUAL const char *cbegin() const noexcept PUREVIRTUAL;	\
		VIRTUAL const char *cend() const noexcept PUREVIRTUAL;	\
	\
		VIRTUAL size_t size() const noexcept PUREVIRTUAL;	\
		VIRTUAL size_t capacity() const noexcept PUREVIRTUAL;	\
		VIRTUAL void resize(size_t) noexcept(false) PUREVIRTUAL;	\
		VIRTUAL bool empty() const noexcept PUREVIRTUAL;	\
		VIRTUAL void reserve(size_t) noexcept(false) PUREVIRTUAL;	\
		VIRTUAL void shrink_to_fit() noexcept(false) PUREVIRTUAL;	\
	\
		VIRTUAL char &operator[](size_t pos) noexcept(false) PUREVIRTUAL;	\
		VIRTUAL const char &operator[](size_t pos) const noexcept(false) PUREVIRTUAL;	\
		VIRTUAL char &back() noexcept(false) PUREVIRTUAL;	\
		VIRTUAL const char &back() const noexcept(false) PUREVIRTUAL;	\
	\
		VIRTUAL size_t find_first_of(char c) const noexcept PUREVIRTUAL;	\
		VIRTUAL const char *c_str() const noexcept PUREVIRTUAL;	\
		VIRTUAL int compare(const StringInterface &si) const noexcept PUREVIRTUAL;	\
		VIRTUAL size_t find(const StringInterface &si) const noexcept PUREVIRTUAL;	\
	\
		VIRTUAL bool operator==(const StringInterface &lhs) const noexcept PUREVIRTUAL;	\
		VIRTUAL bool operator<(const StringInterface &lhs) const noexcept PUREVIRTUAL;	\
		VIRTUAL bool operator>(const StringInterface &lhs) const noexcept PUREVIRTUAL;	\
		VIRTUAL bool operator!=(const StringInterface &lhs) const noexcept PUREVIRTUAL;	\
		VIRTUAL void swap(StringInterface &lhs) noexcept PUREVIRTUAL;	\
	\
		VIRTUAL void push_back(char c) noexcept(false) PUREVIRTUAL;	\
		VIRTUAL void pop_back() noexcept PUREVIRTUAL;	\
		VIRTUAL void insert(size_t pos,char c) noexcept(false) PUREVIRTUAL;	\
		VIRTUAL void erase(size_t pos) noexcept(false) PUREVIRTUAL;	
#ifdef MYCODE_TEST_MODE
#define VIRTUAL virtual
#define PUREVIRTUAL = 0 
	public:
		MYCODE_STRING_INTERFACE
		VIRTUAL ~StringInterface() noexcept {};	
#undef VIRTUAL
#undef PUREVIRTUAL 
#endif
#define VIRTUAL
#define PUREVIRTUAL 
};

}
#define MYCODE_STRING_INTERFACE_H
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇丑数与非丑数 下一篇C++跨文件共享全局变量

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目