游戏开发之类实现String及其迭代器(C++基础)

1.数据结构及实现

#include <iostream>
class String
{friend std::ostream& operator<<(std::ostream& ouput, const String& string);//友元函数
private:char* _pArr;//记录动态字符串头int _nLen;//当前字符串长度int _nMaxLen;//临时最大字符串长度public://构造函数String(){_nLen = -1;_nMaxLen = 10;_pArr = (char*)new char[_nMaxLen];}//构造函数重载String(const char* value){int strLen = strlen(value);_nLen = strLen - 1;_nMaxLen = strLen * 2;_pArr = (char*)new char[_nMaxLen];memcpy(_pArr, value, strLen);_pArr[strLen] = '\0';}//析构函数~String(){delete[] _pArr;}//拷贝构造函数String(const String& str){_nLen = str._nLen;_nMaxLen = str._nMaxLen;_pArr = new char[_nMaxLen];memcpy(_pArr, str._pArr, _nLen + 1);}//String迭代器class iterator{private:char* _pArr;//动态字符串头int _index;//当前迭代器位置public:iterator(){_pArr = NULL;_index = 0;}iterator(char *const pArr_, int index_){_pArr = pArr_;_index = index_;}//重载!=运算符const bool& operator!=(const iterator& iter){return _index != iter._index ? 1 : 0;}//重载前置++运算符const iterator& operator++(){_index++;return *this;}//重载后置++运算符iterator operator++(int){iterator iter;iter._index = _index;_index++;iter._pArr = _pArr;return iter;}//重载*运算符const char& operator*(){return _pArr[_index];}//获取当前迭代器位置const int& GetIndex(){return _index;}};//获取第一个节点位置iterator begin(){return iterator(_pArr, 0);}//获取最后一个节点的下一个节点位置iterator end(){return iterator(_pArr, _nLen + 1);}//尾部插入void append(const char* value){int strLen = strlen(value);if (_nLen + strLen + 1 >= _nMaxLen){_nMaxLen *= 5;char *temp = (char*)new char[_nMaxLen];memcpy(temp, _pArr, sizeof(char)*(_nLen + 1));delete[] _pArr;_pArr = temp;}memcpy(_pArr + _nLen + 1, value, strLen);_nLen += strLen;_pArr[_nLen + 1] = '\0';}//根据子串查询,返回查找到的位置信息int find(const char* value){int strLen = strlen(value), index = 0;for (int i = 0, j = 0; i < _nLen; i++){if (_pArr[i] == value[j]){int count = 0;for (int z = 0; z < strLen; z++){if (_pArr[i + z] == value[z])++count;}if (count == strLen){index = i;break;}}}return index;}//重载==运算符const bool& operator==(const String& str){if (_nLen != str._nLen)return 0;int num = -1;for (int i = 0; i < _nLen + 1; i++){if (_pArr[i] == str._pArr[i])++num;}return num == _nLen ? 1 : 0;}//重载!=运算符const bool& operator!=(const String& str){if (_nLen != str._nLen)return 1;int num = 0;for (int i = 0; i < _nLen; i++){if (_pArr[i] == str._pArr[i])++num;}return num == _nLen ? 0 : 1;}//重载+=运算符const String& operator+=(const String& str){append(str._pArr);return *this;}//重载+运算符String operator+(const String& str){String str_;str_.append(_pArr);str_.append(str._pArr);return str_;}//重载+运算符String operator+(const char* str){String str_;str_.append(_pArr);str_.append(str);return str_;}
};//重载<<运算符
std::ostream& operator<<(std::ostream& output, const String& string)
{int count = -1;while ((++count) != string._nLen + 1)output << string._pArr[count];return output;
}

2.测试

int main()
{String s("hello");String s1("hello");std::cout << (s == s1) << std::endl;String s2(s + s1);s2 += s;std::cout << "s2:" << s2 << std::endl;s.append("fafafafagag");String s4 = s1 + "world";std::cout << "s4:" << s4 << std::endl;std::cout << s.find("fafa") << std::endl;std::cout << s << std::endl;String::iterator iterBegin = s.begin();String::iterator iterEnd = s.end();for (; iterBegin != iterEnd; ++iterBegin)std::cout << *iterBegin << " ";std::cout << std::endl;return 0;
}

游戏开发之类实现String及其迭代器(C++基础)相关推荐

  1. webGL、webGPU、封装、渲染引擎 three.js、游戏引擎,定位是游戏开发,在前面的渲染引擎基础上,还提供了骨骼动画、物理引擎、AI、GUI 等功能,以及可视化编辑器来设计关卡,支撑大型游戏

    https://zhuanlan.zhihu.com/p/162878354 如何选择 WebGL 框架和引擎? ​ 知道得越多,不知道的就更多了 数据可视化Sugar-百度智能云 ​cloud.ba ...

  2. Unity3D游戏开发初探—2.初步了解3D模型基础

    一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...

  3. 【iOS-Cocos2d游戏开发之二十】精灵的基础知识点总汇(位图操作/贴图更换/重排z轴等)以及利用CCSprite与CCLayerColor制作简单遮盖层!...

    为什么80%的码农都做不了架构师?>>>     李华明Himi 原创,转载务必在明显处注明: 转载自 [黑米GameDev街区] 原文链接:  http://www.himigam ...

  4. 【iOS-Cocos2d游戏开发】系列(总结了多篇文章,可以好好学习

    最近几天仔细了解了iOS游戏开发引擎,常用的cocos2d,Unity引擎,那么Unity是非免费的,而cocos2d则是免费开源的: 最后促使我选择cocos2d的原因有两点: 1.最重要的原因是它 ...

  5. 游戏开发主要学哪些课程?

    当盗墓笔记从小说走上影视屏幕,有一个行业也火热起来--网页游戏.从盗墓笔记到如今大热的司马懿之军师联盟,几乎每大火一部影视剧,就会有相应的网页游戏问世.由此可见游戏开发行业也成热门职业. 游戏开发需要 ...

  6. Unity3D和UE4游戏开发引擎哪个是游戏开发者最爱?

    UE4和Unity3D应该可以算的上是目前市场上最为热门的游戏引擎,也各自拥有为数众多的开发者.虽然一些大型的游戏公司仍然运用自家开发的引擎来制作游戏,但是在巨大的市场需求下,独立开发者与游戏工作室依 ...

  7. 游戏开发需要了解哪些背景知识?

    这一节开始,我将带你进入游戏开发的世界. 从最初的小霸王,到充满混混和烟味的街机厅,到 PS.Xbox.DC.N64 等次世代游戏主机,再到电脑游戏,再到如今,在手机上就能玩到各种各样的游戏. 我会依 ...

  8. 【备注】【C24】《Android 3D游戏开发技术详解与典型案例》PDF 下载

    [C24]<Android 3D游戏开发技术详解与典型案例>PDF 下载 目前市面上的Android技术书籍还比较少,Android3D游戏开发的书籍更是没有.因此,在现在市面上,Andr ...

  9. 《HTML5 Canvas核心技术 图形、动画与游戏开发》 读书笔记

    <HTML5 Canvas核心技术 图形.动画与游戏开发> 读书笔记 文章目录 <HTML5 Canvas核心技术 图形.动画与游戏开发> 读书笔记 第1章 基础知识 第2章 ...

  10. 游戏开发需要的背景知识

    游戏的发展 现在公认的第一款电子游戏(也就是主机游戏),是 1952 年面世的.游戏玩的是井字棋,6 年后才出现了简陋的网球游戏.     下面这幅图就是井字棋游戏,尽管它与 1952 年的游戏画面还 ...

最新文章

  1. 设置系统和管理计算机硬件的应用程序,Windows7操作系统中用于设置系统和管理计算机硬件的应用程序是()...
  2. Zaxis数据编程方法
  3. 【计算机网络】网络层 : IPv4 地址 ( IP 地址分类 | 特殊 IP 地址 | 私有 IP 地址 | A 类、B 类、C 类 IP 地址网络号主机号数量 )★
  4. 图像处理与计算机视觉基础、经典以及最近发展
  5. [ECMAScript] 说说你对async/await的理解?
  6. 大神云集!2019年谷歌博士奖学金获得者重磅问世,清华、上交大、港中文入选最多!...
  7. 六月 北京站 | 高性能计算之GPU CUDA 培训
  8. python3.4 or 3.x xlwt replaced with xlwt-future
  9. enetics v1.5.0 绿色版
  10. Delphi 与 DirectX 之 DelphiX(91): TDIB.DrawMono();
  11. C++ OpenCV 学习笔记【0】- 未整理,草稿记录用
  12. 3Dmax读取丢失的贴图的方法
  13. C语言基本入门英语单词,C语言基本入门英语单词.doc
  14. 用javaScript实现轮播图效果 包括自动变换,按钮控制,上一张下一张切换
  15. 对CMSIS的学习(第1-3部分)
  16. 802d简明调试手册_西门子数控系统828D简明调试手册.pdf
  17. java+sql宿舍管理系统
  18. c语言 日期加减天数返回日期 闰年,日期计算器(多图)
  19. EMC trainning杂谈
  20. 商品销售数据建模及分析

热门文章

  1. 介绍4个大神常用而你不常用的python函数--assert,map,filter,reduce
  2. 论文赏析[EACL17]K-best Iterative Viterbi Parsing(K-best迭代维特比句法分析)
  3. 基于DEAP库的python进化算法--遗传算法实践--配词问题
  4. 深度学习2.0-22.Keras高层接口之自定义层或网络
  5. 机器学习实战笔记1-机器学习基础
  6. 游戏设计情境探秘之动画
  7. Windows系统过滤病毒功能吗
  8. numpy教程:数学函数和基本统计函数
  9. kindle刷机ttl_求助大神!现在KPW2只能在TTL下进入uboot
  10. byte 类型_Go 语言string 也是引用类型