运用到的知识:(不分先后)

模板,类,循环数组,线性表,指针,异常,迭代器,输入输出等C++基础

#include<iterator>
#include<iostream>
#include<vector>
#include<cstring>
#include<string>
using namespace std;class EmptyListException :public exception
{
public:EmptyListException(){}
};
class InvalidIteratorException :public exception
{
public:InvalidIteratorException(){}
};template<class T>
class ArrayList {public:class Iterator : public iterator <input_iterator_tag, T> {public:Iterator(T* p,T* elem,int cnt) {_ptr = p;selfElems = elem;count = cnt;}bool operator != (const Iterator &iter) {return _ptr!= iter._ptr;}bool operator == (const Iterator &iter) {return _ptr == iter._ptr;}Iterator& operator ++ () {_ptr++;if(_ptr >= selfElems+count) _ptr = selfElems;return *this;}Iterator& operator -- () {_ptr--;if(_ptr < 0) _ptr = selfElems+count-1;return *this;}Iterator operator ++ (int) {Iterator tmp= *this;_ptr++;if(_ptr >= selfElems+count) _ptr = selfElems;return tmp;}Iterator operator -- (int) {Iterator tmp= *this;_ptr--;if(_ptr < 0) _ptr = selfElems+count-1;return tmp;}T& operator * () {return *_ptr;}public:T* _ptr;T* selfElems;int count;};ArrayList() {_selfElems = new T[4];_count = 4;init();}ArrayList(int n) {_selfElems = new T[n];_count = n;init();}~ArrayList() {delete[] _selfElems;}void init() {_front=0;_back=-1;nowsize = 0;}T& operator[](int i) {return _selfElems[i];}Iterator begin() {return Iterator(_selfElems+_front,_selfElems,_count);}Iterator end() {return Iterator(_selfElems + (_back + 1)%_count,_selfElems,_count);}T& front() {return _selfElems[_front];}T& back() {return _selfElems[_back];}int size() const {return nowsize;}void insertFront(T& e) {if(nowsize == _count) {T* _selfElems2 = new T[_count*2];for(int i = 0; i<_count; i++) {_selfElems2[i] = _selfElems[(_front+i)%_count];}delete[] _selfElems;_selfElems = _selfElems2;_front=0;_back=_count-1;_count*=2;}if(_front == 0) _front=_count-1;else _front--;_selfElems[_front] = e;nowsize++;}void insertBack(T&e) {if(nowsize == _count) {T* _selfElems2 = new T[_count*2];for(int i = 0; i<_count; i++) {_selfElems2[i] = _selfElems[(_front+i)%_count];}delete[] _selfElems;_selfElems = _selfElems2;_front=0;_back=_count-1;_count*=2;}_back = (_back+1) % _count;_selfElems[_back] = e;nowsize++;}void insert(Iterator p, T& e) {if(p._ptr < _selfElems || p._ptr >= _selfElems+_count||(begin()._ptr < end()._ptr && (p._ptr < begin()._ptr || p._ptr >= end()._ptr)) || (begin()._ptr > end()._ptr && (p._ptr < begin()._ptr && p._ptr >= end()._ptr))) {throw InvalidIteratorException();}if(nowsize == _count) {T* _selfElems2 = new T[_count*2];for(int i = 0; i<_count; i++) {_selfElems2[i] = _selfElems[(_front+i)%_count];}delete[] _selfElems;_selfElems = _selfElems2;_front=0;_back=_count-1;_count*=2;}int pos = p._ptr - begin().ptr;int len = (_back-1)-(pos+_front);for(int i = len; i>=0; i++) {int tar = i + pos+_front;_selfElems[(tar+1)%_count] = _selfElems[tar%_count];}_selfElems[pos+_front] = e;nowsize++;}void removeFront() {if(nowsize == 0) {throw EmptyListException();}_front = (_front+1)%_count;nowsize--;}void removeBack() {if(nowsize == 0) {throw EmptyListException();}_back = (_back+_count-1)%_count;nowsize--;}void remove(Iterator p) {if(nowsize == 0) {throw EmptyListException();}if(p._ptr < _selfElems || p._ptr >= _selfElems+_count||(begin()._ptr < end()._ptr && (p._ptr < begin()._ptr || p._ptr >= end()._ptr)) || (begin()._ptr > end()._ptr && (p._ptr < begin()._ptr && p._ptr >= end()._ptr))) {throw InvalidIteratorException();}int pos = p._ptr - begin()._ptr;//pos+_front ~ (back-1)int len = (_back-1)-(pos+_front);for(int i = 0; i<len; i++) {int tar = i + pos+_front;_selfElems[tar%_count] = _selfElems[(tar+1)%_count];}nowsize--;}private:int _count;int _front,_back,nowsize;T* _selfElems;};void testArrayListUnderflow() {// the first try blocktry {ArrayList<int> arr;int x = 1;arr.insertBack(x);arr.removeFront();arr.removeFront();printf("did not catch exception\n");} catch(EmptyListException& e) {printf("caught EmptyStackException\n");}// the second try blocktry {ArrayList<int> arr;int x = 1;arr.insertBack(x);arr.removeBack() ;arr.removeBack() ;printf("did not catch exception\n");} catch(EmptyListException& e) {printf("caught EmptyStackException\n");}// the third try blocktry {ArrayList<int> arr;int x = 1;arr.insertBack(x);ArrayList<int>::Iterator it = arr.begin();arr.remove(it);it = arr.begin();arr.remove(it);printf("did not catch exception\n");} catch(EmptyListException& e) {printf("caught EmptyStackException\n");}
}
void testIntegerIterator() {ArrayList<int> arr;int a[6] = {1,2,3,4,5,6};for(int i = 0; i<6; i++) arr.insertBack(a[i]);for(ArrayList<int>::Iterator iter = arr.begin(); iter != arr.end(); iter++) {cout << *iter << " ";}cout << endl;arr.removeFront();arr.removeFront();arr.removeFront();int b[3] = {7,8,9};arr.insertBack(b[0]);arr.insertBack(b[1]);arr.insertBack(b[2]);for(ArrayList<int>::Iterator iter = arr.begin(); iter != arr.end(); iter++) {cout << *iter << " ";}cout << endl;
}
void testStringIterator() {ArrayList<string> arr;string a[6] = {"s1","s2","s3","s4","s5","s6"};for(int i = 0; i<6; i++) arr.insertBack(a[i]);for(ArrayList<string>::Iterator iter = arr.begin(); iter != arr.end(); iter++) {cout << *iter << " ";}cout << endl;arr.removeFront();arr.removeFront();arr.removeFront();string b[3] = {"s7","s8","s9"};arr.insertBack(b[0]);arr.insertBack(b[1]);arr.insertBack(b[2]);for(ArrayList<string>::Iterator iter = arr.begin(); iter != arr.end(); iter++) {cout << *iter << " ";}cout << endl;
}
int main() {testArrayListUnderflow();testIntegerIterator();testStringIterator();return 0;
}

参考资料:

http://c.biancheng.net/view/471.html

https://blog.csdn.net/holyweng/article/details/82821646

https://blog.csdn.net/qq_36745117/article/details/83863190

https://blog.csdn.net/XiaoHeiBlack/article/details/77014626

C++自定义迭代器模板,实现ArrayList基本操作,自定义迭代器遍历相关推荐

  1. html 自定义打印模板,HTML+CSS入门 自定义模板详解

    本篇教程介绍了HTML+CSS入门 自定义模板详解,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门.< 首先总的stylecss和大模板都是当初angel_Kitty学姐的,嗯, ...

  2. 拖拽元素自定义html模板,JS实现的自定义网页拖动类

    本文实例讲述了JS实现的自定义网页拖动类.分享给大家供大家参考,具体如下: 先来看运行效果截图如下: 在线演示地址如下: 具体代码如下: /p> "http://www.w3.org/ ...

  3. php 自定义打印模板下载,PHP – 创建自定义模板系统?

    我已经在这里搜索过,令人惊讶的是我找不到答案.我发现了一个类似的线程,但没有真正的解决方案.复杂的部分是循环,如果我不需要循环我可以只是做一个常规替换. 所以,我有一个带有一些标记的.html文件,如 ...

  4. ArrayList存储自定义对象并遍历三种方式(迭代器 普通for 增强for)

    import java.util.ArrayList; import java.util.Iterator;/** ArrayList存储自定义对象并遍历* A:迭代器* B:普通for* C:增强f ...

  5. 6、jeecg 笔记之 自定义excel 模板导出(一)

    6.jeecg 笔记之 自定义excel 模板导出(一) 1.前言 jeecg 中已经自带 excel 的导出导出功能,其所使用的是 easypoi,尽管所导出的 excel 能满足大部分需求, 但总 ...

  6. android 自定义模板下载,android studio 自定义模板

    由于项目用上了 mvp 架构,基本上一个页面就至少需要新创建6个类,分别是 model view presenter 的接口以及其对应的实现类,再加上使用 dagger 的话就要更多了,所以这时候 a ...

  7. TFS2008自定义过程模板之 Power Tools 工具篇

    上午写了一篇关于自定义过程模板的文章http://www.cnblogs.com/sansi/archive/2010/03/11/1683355.html,是手工直接处理xml文件.刚刚发现原来是有 ...

  8. VSCode 自定义html5模板

    新建html快捷键 当我们想在VSCode中新建html代码时,可以 输入! 然后回车或者Tab即可自动生成一个html文件模板,效果如下: (二)自定义html5模板 但我们每次新建html模板时候 ...

  9. 类模板,多种类型的类模板,自定义类模板,类模板的默认类型,数组的模板实现,友元和类模板,友元函数,类模板与静态变量,类模板与普通类之间互相继承,类模板作为模板参数,类嵌套,类模板嵌套,类包装器

     1.第一个最简单的类模板案例 #include "mainwindow.h" #include <QApplication> #include <QPush ...

  10. MyEclipse自定义servlet模板

    每次用MyEclipse默认的servlet的模板创建servlet的时候,里面会生成好多没有用的代码.因此,我们可以自定义servlet模板.步骤如下: 找到com.genuitec.eclipse ...

最新文章

  1. windows 7 unmountable boot volume 解决方法
  2. Oracle的LINUX安装
  3. arm-linux-g 找不到头文件,交叉编译错误“ arm-none-eabi-g ++找不到条目符号”
  4. 1.6 Java数组也是一种数据类型
  5. 【转载】十年学会编程
  6. 微机原理换行代码_设置段落样式的标记中,用来换行的标记是:
  7. 驳斥5条普通流Tropes
  8. Java相当好的隐私(PGP)
  9. Windows五种IO模型性能分析和Linux五种IO模型性能分析
  10. pynput模块—键盘鼠标操作和监听
  11. Atitit 图像指纹识别匹配sift算法 atlks总结
  12. 苹果怎么改字体_截图里的文字要改,字体怎么做到一模一样?
  13. android实现按键找图功能,从零学起之安卓篇《按键精灵安卓版找图找色应用汇总介绍》更新20140603 _ 教程中心 - 按键精灵论坛...
  14. html关于点击radio触发事件
  15. Word、Excel操作技巧大全
  16. python怎么算积分_Python求解数值积分-定积分求解
  17. Java 程序员们值得一看的好书推荐
  18. 神经网络预测结果分析,神经网络怎么预测数据
  19. 怀揣巨资等了一季 陈天桥距门户野心咫尺之遥
  20. 计算机网络之网络层7

热门文章

  1. 同步,异步,多线程,你怎么看?
  2. JS 获取当前日期时间(兼容IE FF)
  3. [Leedcode][JAVA][第25题][K个一组反转链表][链表][递归]
  4. 可信计算 沈昌祥_沈昌祥院士:用主动免疫可信计算构筑车联网安全防线
  5. 街上第一台电子计算机是,南京信息工程大学滨江学院2009级《计算机基础》(文科)a试卷(含答案)【最新】.doc...
  6. 12c表空间不存在_一文看懂Oracle查询表空间的每日增长量和历史情况统计
  7. c语言solaris中图形库,成功弄出simics下的CDE登录界面,与大家分享
  8. WinCE流设备驱动简介及GPIO驱动的实现
  9. java的未检查异常有哪些_Java:检查异常与未检查异常
  10. 无法定位程序输入点 except_软件测试中的功能测试点(三)