码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 2023年9月14日


    仿照vector,编写自己的myvector

    1. #include
    2. using namespace std;
    3. template<typename T>
    4. class myvector
    5. {
    6. public:
    7. T *first;
    8. T *last;
    9. T *end;
    10. public:
    11. //无参构造
    12. myvector()
    13. {
    14. first = new T[1];
    15. last = first;
    16. end=first+1;
    17. cout<<"无参构造"<
    18. }
    19. //有参构造
    20. myvector(int l,T d)
    21. {
    22. first=new T[l];
    23. last=first;
    24. end=first+l;
    25. for(int i=0;i
    26. {
    27. first[i]=d;
    28. last++;
    29. }
    30. cout<<"有参构造"<
    31. }
    32. //拷贝构造
    33. myvector(const myvector &other)
    34. {
    35. first=new T[other.end-other.first];
    36. last=first;
    37. end=first+(other.end-other.first);
    38. for(int i=0;i
    39. {
    40. first[i]=other.first[i];
    41. last+=1;
    42. }
    43. cout<<"拷贝构造"<
    44. }
    45. //析构函数
    46. ~myvector()
    47. {
    48. delete []first;
    49. first=nullptr;
    50. last=nullptr;
    51. end=nullptr;
    52. cout<<"析构函数"<
    53. }
    54. //at函数
    55. T &myat(int x)
    56. {
    57. return first[x];
    58. }
    59. //back函数
    60. T myback()
    61. {
    62. return *last;
    63. }
    64. //capacity函数
    65. int mycapacity()
    66. {
    67. return end-first;
    68. }
    69. //clear函数
    70. void myclear()
    71. {
    72. last=first;
    73. }
    74. //二倍扩容
    75. void mydouble()
    76. {
    77. int y=end-first;
    78. int x =last-first;
    79. T *p=new T[y*2];
    80. for(int i=0;i
    81. {
    82. p[i]=first[i];
    83. }
    84. delete []first;
    85. first=p;
    86. last=first+x;
    87. end=first+y*2;
    88. p=nullptr;
    89. }
    90. //insert函数
    91. void myinsert(int n,T e)
    92. {
    93. last=last+1;
    94. if(last+1>=end)
    95. {
    96. mydouble();
    97. }
    98. for(int i=(last-first)+1;i>0;i--)
    99. {
    100. first[i]=first[i-1];
    101. if(i==n-1)
    102. {
    103. first[i]=e;
    104. return ;
    105. }
    106. }
    107. }
    108. //empty函数
    109. bool myempty()
    110. {
    111. if(last==first)
    112. {
    113. return 1;
    114. }
    115. else
    116. {
    117. return 0;
    118. }
    119. }
    120. void show()
    121. {
    122. for(int i=0;i
    123. {
    124. cout<" ";
    125. }
    126. cout<
    127. }
    128. };
    129. int main()
    130. {
    131. myvector<int>ve1(5,4);
    132. myvector<int>ve2(ve1);
    133. int y;
    134. y=ve1.mycapacity();
    135. cout<
    136. ve1.myinsert(4,6);
    137. ve1.myinsert(3,5);
    138. int z;
    139. z=ve1.mycapacity();
    140. ve1.show();
    141. cout<
    142. return 0;
    143. }

  • 相关阅读:
    《c++ Primer Plus 第6版》读书笔记(4)
    win10更新错误0x800f0922的解决方法
    4-10构造器
    Qt的简单应用:五子棋游戏( 含源码 )
    高压放大器在mems传感器中的应用有哪些
    guava缓存使用不当导致的FullGC
    25.CyclicBarrire的功能和作用
    【0116】PostgreSQL/MVCC
    【Kingbase FlySync】命令模式:安装部署同步软件,实现KES到KES实现同步
    java基于springboot+vue的旅游心得分享攻略系统 elementui
  • 原文地址:https://blog.csdn.net/2201_75732711/article/details/132890679
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号