一个自己实现的Vector(只能处理基本类型数据)

  • string 类型不行

  • bool char* int double float long long 等基本s类型可用

  • 使用模板类实现。底层为数组实现。

  • dvector.h

  1. #ifndef DVECTOR_H
  2. #define DVECTOR_H
  3. #pragma once
  4. #include <iostream>
  5. template <class T>
  6. class dvector
  7. {
  8. public:
  9. dvector();
  10. ~dvector();
  11. bool push_back(T);
  12. void show();
  13. public:
  14. T* p;
  15. int len;
  16. int real_len;
  17. };
  18. #endif // DVECTOR_H
  • dvector.cpp
  1. #include "dvector.h"
  2. template <class T>
  3. dvector<T>::dvector()
  4. {
  5. len=real_len =0;
  6. p=nullptr;
  7. }
  8. template<class T>
  9. dvector<T>::~dvector()
  10. {
  11. if(p!=nullptr)
  12. {
  13. delete []p;
  14. p=nullptr;
  15. }
  16. }
  17. template <class T>
  18. void dvector<T>::show()
  19. {
  20. if(p!=nullptr)
  21. {
  22. for(int i=0;i<real_len;i++){
  23. std::cout<<i<<"\t"<<*(p+i)<<std::endl;
  24. }
  25. std::cout<<"length="<<real_len<<std::endl;
  26. }else {
  27. std::cout<<"NNNNNNNNNNNNNNNNNNNNNNNNNNo thing"<<std::endl;
  28. }
  29. }
  30. template<class T>
  31. bool dvector<T>::push_back(T t){
  32. if(p==nullptr)
  33. {
  34. //第一个为空说明只有一个元素
  35. p=new T;
  36. *p=t;
  37. real_len=len=1;
  38. }else {
  39. //第一个不为空说明有多个元素,这时候链表就必须重新分配内存
  40. //分配为数组形式
  41. T *ptemp = new T[real_len+1];
  42. for(int i=0;i<real_len;i++)
  43. {
  44. *(ptemp+i)=*(p+i);
  45. }
  46. *(ptemp+real_len)=t;
  47. delete []p;
  48. p=ptemp;
  49. real_len+=1;
  50. len+=1;
  51. }
  52. return true;
  53. }
  54. int main()
  55. {
  56. //测试基本类型
  57. //string 会出错,因为string 不是基本类型,是一种类似 vector 的类模板,其内部的内存操作与基本类型不一样。
  58. //1. int
  59. dvector<int>* dv1=new dvector<int>;
  60. dv1->push_back(12);
  61. dv1->push_back(15);
  62. dv1->push_back(1995);
  63. dv1->push_back(200);
  64. dv1->push_back(2);
  65. dv1->push_back(1);
  66. dv1->show();
  67. //2. double
  68. dvector<double>* dv2=new dvector<double>;
  69. dv2->push_back(12.2);
  70. dv2->push_back(15.3);
  71. dv2->push_back(1995.0220);
  72. dv2->push_back(200.1);
  73. dv2->push_back(2.3);
  74. dv2->push_back(1.9);
  75. dv2->show();
  76. //3. char*
  77. dvector<char*>* dv3=new dvector<char*>;
  78. dv3->push_back("nimei");
  79. dv3->push_back("de");
  80. dv3->push_back("垃圾");
  81. dv3->push_back("95");
  82. dv3->push_back("lalala");
  83. dv3->push_back("45");
  84. dv3->show();
  85. return 0;
  86. }

一个自己实现的Vector(只能处理基本类型数据)的更多相关文章

  1. Spring @ResponseBody只能返回String类型数据解决办法

    今天自己搭Spring MVC框架玩,使用AJAX调用Spring controller 并返回map对象,突然发现,哎,怎么@Response中只能返回String, 我用的Spring 3的版本也 ...

  2. 一个自己实现的Vector 完善版本

    一个自己实现的Vector(只能处理基本类型数据) 转载自: https://www.ev0l.art/index.php/archives/22/ string 类型不行 bool char* in ...

  3. 新建一个用户,让他只能看到某一个视图(View),如何设置

    新建一个用户,让他只能看到某一个视图(View),怎么设置? 新建一个用户,让他只能看到某一个视图(View),怎么设置? 如果做不到“只能看到指定视图”,最好能做到“对指定表或视图只有查询的权限”. ...

  4. vector作为函数返回类型

    在实际的操作中,我们经常会碰到需要返回一序列字符串或者一列数字的时候,以前会用到数组来保存这列的字符串或者数字,现在我们可以用vector来保存这些数据.但是当数据量很大的时候使用vector效率就比 ...

  5. jquery easyui datagrid 多选只能获取一条数据

    DataGrid属性: singleSelect ------如果为true,则只允许选择一行: idField ------- 指明哪一个字段是标识字段: 方法: 一:getSelections-- ...

  6. Android一个ListView列表之中插入两种不同的数据

    http://www.cnblogs.com/roucheng/ Android一个ListView列表之中插入两种不同的数据 代码如下: public class ViewHolder{ Butto ...

  7. 与众不同 windows phone (38) - 8.0 关联启动: 使用外部程序打开一个文件或URI, 关联指定的文件类型或协议

    [源码下载] 与众不同 windows phone (38) - 8.0 关联启动: 使用外部程序打开一个文件或URI, 关联指定的文件类型或协议 作者:webabcd 介绍与众不同 windows ...

  8. 一个自定义 HBase Filter -“通过RowKeys来高性能获取数据”

    摘要: 大家在使用HBase和Solr搭建系统中经常遇到的一个问题就是:“我通过SOLR得到了RowKeys后,该怎样去HBase上取数据”.使用现有的Filter性能差劲,网上也没有现成的自定义Fi ...

  9. A站有一个页面需要PV统计 A站读写该数据 B站读该数据 需要数据同步

    A站弄个缓存,并且开放出一个读取借口给B站 B站读取数据的时候,调用该接口和数据库内的数据累加,然后进行限时即可 ---------------------- 另外其他方法 session服务.mem ...

随机推荐

  1. ArrayList的底层实现原理

    ArrayList源码分析 1.java.util.ArrayList<E> : List 接口的大小可变数组的实现类 ArrayList 内部基于 数组 存储 各个元素. 所谓大小可变数 ...

  2. N3K license安装

    1.获取设备SN和PAK SN获取: Switch#show license host-id 注意:IOS设备中为:show license udi PAK获取: PAK是单独购买license后,c ...

  3. 使用类进行面向对象编程 Class 实例化 和 ES5实例化 对比,继承

    ES5 写法 function Book(title, pages, isbn) { this.title = title; this.pages = pages; this.isbn = isbn; ...

  4. 线程池三种队列使用,SynchronousQueue,LinkedBlockingQueue,ArrayBlockingQueue

    使用方法: private static ExecutorService cachedThreadPool = new ThreadPoolExecutor(4, Runtime.getRuntime ...

  5. vector 踩过的坑

    今天,做LeetCode上的一道题,198题:Rob House,在纸上画了画,发现了重复的结构,就使用了递归的方式实现的 #include<iostream> #include<v ...

  6. 《iOS开发实战 从入门到上架App Store(第2版)》书籍目录

    第1章 开发准备 1.1 iOS 10新特性简述 1.1.1 新增触觉反馈编程接口 1.1.2 SiriKit框架的开放 1.1.3 引入Messages App 1.1.4 通知框架的整合与扩展 1 ...

  7. python中 yield 的用法 (简单、清晰)

    首先我要吐槽一下,看程序的过程中遇见了yield这个关键字,然后百度的时候,发现没有一个能简单的让我懂的,讲起来真TM的都是头头是道,什么参数,什么传递的,还口口声声说自己的教程是最简单的,最浅显易懂 ...

  8. ES5-json对象和字符串互转

    JSON.stringify();和JSON.parse();是在ES5中提出并使用的:JSON.stringify();将一个对象转化为json字符串,JSON.parse();将一个对象转化为对象 ...

  9. mysql MVCC 实现原理

    MVCC( Multi-Version Concurrency Controll) 每一行都存储了事件发生时的系统版本号(System Version Number),用来替代事件实际发生的时间.每一 ...

  10. pdf.js-----后端返回utf-8数据流,前端处理数据展示pdf

    需求:做项目联调接口时,发现知识库展示pdf未果,经与后端人员沟通,发现以下问题: 1.接口返回的是utf-8数据流,但是前端调用的是base64解析方法: 导致功能有误: 方案一:将后端返回的utf ...