• 9.14 C++作业


    仿照vector手动实现自己的myVector,最主要实现二倍扩容功能

    1. #include <iostream>
    2. using namespace std;
    3. template <typename T>
    4. class Myvector
    5. {
    6. T *data; //存储数据的数组
    7. int len; //当前数组的长度
    8. int mycapa; //容纳数据的总容量
    9. public:
    10. //构造函数
    11. Myvector():data(NULL),len(0),mycapa(0){cout<<"无参构造"<<endl;}
    12. Myvector(int n, T a)
    13. {
    14. data =new T[n];
    15. len = n;
    16. mycapa = n;
    17. for(int i=0;i<n;i++)
    18. {
    19. data[i]=a;
    20. }
    21. cout<<"有参构造"<<endl;
    22. }
    23. //判空
    24. bool my_empty()
    25. {
    26. if(0 == len)
    27. {
    28. return 0;
    29. }
    30. return 1;
    31. }
    32. //判满
    33. bool my_full()
    34. {
    35. if(len == mycapa)
    36. {
    37. return 0;
    38. }
    39. return 1;
    40. }
    41. //在末尾插入一个元素
    42. int mypop_back(T a)
    43. {
    44. if(0 == mycapa)
    45. {
    46. mycapa = 1;
    47. data = new T[1];
    48. }
    49. else if(len+1 > mycapa) //如果数组长度大于最大容量,最大容量二倍扩容
    50. {
    51. mycapa = 2*len;
    52. int *p = new T[mycapa];
    53. for(int i=0; i<len; i++)
    54. {
    55. p[i] = data[i];
    56. }
    57. delete []data;
    58. data = p;
    59. }
    60. data[len] = a;
    61. len++;
    62. }
    63. //任意插入
    64. void my_insert(int pos, T a)
    65. {
    66. if(0 == mycapa)
    67. {
    68. mycapa = 1;
    69. data = new T[1];
    70. data[0] = a;
    71. }
    72. else if(len+1 > mycapa)
    73. {
    74. mycapa = 2*len;
    75. int *p = new T[mycapa];
    76. for(int i=0; i<pos; i++)
    77. {
    78. p[i] = data[i];
    79. }
    80. p[pos] = a;
    81. for(int i=pos; i<len; i++)
    82. {
    83. p[i+1] = data[i];
    84. }
    85. delete []data;
    86. data = p;
    87. }
    88. else
    89. {
    90. for(int i=len-1; i>=pos; i--){
    91. data[i+1] = data[i];
    92. }
    93. data[pos] = a;
    94. }
    95. len++;
    96. }
    97. //移除最后一个元素
    98. void mypop_back()
    99. {
    100. len--;
    101. cout<<"移除最后一个元素成功"<<endl;
    102. }
    103. //删除指定位置元素
    104. void my_erase(int pos)
    105. {
    106. if(my_empty() && pos>len)
    107. {
    108. cout<<"删除失败"<<endl;
    109. }
    110. for(int i=pos; i<len; i++)
    111. {
    112. this->data[i-1] = this->data[i];
    113. }
    114. len--;
    115. cout<<"删除指定位置元素成功"<<endl;
    116. }
    117. //展示
    118. void my_show()
    119. {
    120. cout<<"展示元素";
    121. for(int i=0; i<len; i++)
    122. {
    123. cout<<data[i];
    124. cout<<" ";
    125. }
    126. cout<<endl;
    127. }
    128. //返回能容纳的最大容量
    129. void my_capacity()
    130. {
    131. cout<<"最大容量为"<<mycapa<<endl;
    132. }
    133. //返回指定位置元素
    134. void my_at(int pos)
    135. {
    136. cout<<"第"<<pos<<"个元素是"<<data[pos]<<endl;
    137. }
    138. //清空所有元素
    139. int my_clear()
    140. {
    141. cout<<"已全部清空"<<endl;
    142. return len=0;
    143. }
    144. };
    145. using namespace std;
    146. int main()
    147. {
    148. Myvector<int> m(4,6); //有参构造创建了4个元素,每个元素都是6
    149. m.my_show();
    150. m.mypop_back(7); //尾插
    151. m.mypop_back(8);
    152. m.my_show();
    153. m.my_capacity(); //返回最大容量,此时为8
    154. cout<<"***************************************"<<endl;
    155. m.my_insert(5,9); //任意位置插入元素
    156. m.my_show();
    157. cout<<"***************************************"<<endl;
    158. m.my_erase(5); //任意位置删除元素
    159. m.my_show();
    160. cout<<"***************************************"<<endl;
    161. m.mypop_back(); //移除最后一个元素
    162. m.my_show();
    163. cout<<"***************************************"<<endl;
    164. m.my_at(2);
    165. m.my_clear(); //清空
    166. m.my_show();
    167. return 0;
    168. }

  • 相关阅读:
    【小技巧】苹果手机获取UDID的方法【两种UID的获取方法,非常实用】
    Visual Studio Code 终端配置使用 MySQL
    C# - 反射动态添加/删除Attribute特性
    SpringBoot+MyBatisPlus+AOP实现多数据源切换
    IDEA中Run/Debug Configurations添加VM options和Program arguments
    阻止网络钓鱼诈骗的技巧
    k8s基础概论总结&原理
    【C++】多态的使用详解
    MySQL之MHA高可用配置及故障切换
    Vue----计算属性
  • 原文地址:https://blog.csdn.net/JunCool02/article/details/132893614