面试官让你现场写一个string类,该写哪个版本的?
来源:互联网 发布:10nba总决赛数据 编辑:程序博客网 时间:2024/06/05 21:56
之前的 文章中,我们详细介绍过string类的深浅拷贝的实现以及引用计数,那么如果,在面试过程中你该给面试官展示哪一种string类呢?
今天我们就来写两个适合面试中写的string类
1,深拷贝
class MyString{public: MyString(char* str = "") :_str(new char[strlen(str) + 1]) { strcpy(_str, str); } MyString(const MyString& s) :_str(new char[strlen(s._str)+1]) { strcpy(_str, s._str); } MyString& operator=(const MyString& s) { if (_str) { delete _str; _str = new char[strlen(s._str) + 1]; strcpy(_str, s._str); } return *this; } ~MyString() { if (_str) { delete _str; _str = NULL; } } char& operator[](size_t pos) { assert(pos); return _str[pos]; } bool operator > (const MyString& s) { const char* str1 = _str; const char* str2 = s._str; return str1 > s._str; }private: char* _str;};
2,若是时间充裕,且你能讲清楚关于引用计数的实现时,就可以展示一个基于引用计数的string类
class String{public: String(const char* str = "") { if (str == NULL) { _str = new char[strlen(str) + 1 + 4]; (*(int*)_str) = 1; _str = (char*)(((int*)_str) + 1); *_str = '\0'; } else { _str = new char[strlen(str) + 1 + 4]; strcpy(_str, str); *((int *)_str - 1) = 1; } } String(const String& s) :_str(s._str) { ++GetCount(); } String& operator = (const String& s) { if (this != &s) { Release(); _str = s._str; --GetCount(); } } char& operator[](size_t index) { if (GetCount() > 1) { char *pTmp = new char[strlen(_str) + 1 + 4]; strcpy(pTmp + 4, _str); --GetCount(); _str = pTmp + 4; GetCount() = 1; } return _str[index]; } const char & operator[](size_t index)const { return _str[index]; } friend ostream operator<<(ostream& output, const String& s) { output << s._pStr; return output; }protected: //引用计数 int& GetCount() { return *((int*)_str - 1); } void Release() { if (_str && (--GetCount() == 0)) { _str = (char*)((int*)_str - 1); delete _str; _str = NULL; } }private: char* _str;};
详细的知识戳链接:string的深浅拷贝和引用计数
阅读全文
1 0
- 面试官让你现场写一个string类,该写哪个版本的?
- 如果Google面试让你用python写一个树的遍历程序
- 如果Google面试让你用python写一个树的遍历程序
- 面试中常考的现场写程序题目
- 面试中常考的现场写程序题目
- 面试中常考的现场写程序题目
- 面试中常考的现场写小程序题目
- 设计一个getMin功能的栈,如果面试官让你写一个数组类,一定不要用指针去管理new出来原生的数组,那就是在给自己挖坑
- 写一个仿string的类
- 自己写一个string类
- C++写一个String类
- 写一个简单String类
- 写程序的分为三个阶段,你是哪个阶段?
- 让你写功能模块你就写~~
- 写一个老是忘记的linux进程pid是哪个?
- 学术论文你该怎么写
- 让XDoclet为你写存根类
- 面试 :如何写一个满分的strcpy!!!
- 【Hopcroft-Karp && 二分图的最大匹配数 && 有向图】HDU
- 【我的Java笔记】常用类_StringBuffer
- linux jdk安装
- Java通过文件头获取文件类型
- Android仿微信语音录制和播放
- 面试官让你现场写一个string类,该写哪个版本的?
- Android Studio Gradle实践之多渠道自动化打包
- python基础(1)
- vue router 导航钩子(导航守卫)
- 学习笔记MFC_1
- 51nod 1600 Simple KMP 后缀自动机+树链剖分+线段树
- openvpn安装
- kafka版本不匹配问题
- ECMAScript 6 入门学习(5.数值的扩展)