• 23062C++&QTday7


     仿照vector手动实现自己的myVector

    代码:

    1. #include
    2. #define MAX 128
    3. using namespace std;
    4. template<typename T>
    5. class myVector
    6. {
    7. private:
    8. int num;
    9. T val;
    10. T *data; //数据域
    11. int V_size=MAX;
    12. public:
    13. myVector():data(new T[MAX]),num(0){} //无参构造
    14. myVector(int a,T b):num(a),val(b),data(new T[MAX]) //有参构造
    15. {
    16. //二倍扩容判断
    17. if(a>V_size)
    18. {
    19. V_size*=2;
    20. T *newdata=new T[V_size];
    21. for(int i=0;i
    22. newdata[i]=data[i];
    23. delete[] data;
    24. data=newdata;
    25. }
    26. for(int i=0;i
    27. {
    28. data[i]=b;
    29. }
    30. }
    31. ~myVector() //析构函数
    32. {
    33. delete[] data;
    34. data=NULL;
    35. }
    36. // 定义迭代器类
    37. class MyIterator {
    38. private:
    39. T* ptr;
    40. public:
    41. //有参构造
    42. MyIterator(T* p):ptr(p){}
    43. // *重载
    44. T& operator*()const {
    45. return *ptr;
    46. }
    47. // 前置++重载
    48. MyIterator& operator++() {
    49. ++ptr;
    50. return *this;
    51. }
    52. // 后置++重载
    53. MyIterator operator++(int) {
    54. MyIterator temp = *this;
    55. ++ptr;
    56. return temp;
    57. }
    58. // 前置--重载
    59. MyIterator& operator--() {
    60. --ptr;
    61. return *this;
    62. }
    63. // 后置--重载
    64. MyIterator operator--(int) {
    65. MyIterator temp = *this;
    66. --ptr;
    67. return temp;
    68. }
    69. // ==重载
    70. bool operator==(const MyIterator& other) const {
    71. return ptr == other.ptr;
    72. }
    73. // !=重载
    74. bool operator!=(const MyIterator& other) const {
    75. return ptr != other.ptr;
    76. }
    77. };
    78. //empty函数
    79. bool my_empty()
    80. {
    81. if(num==0)
    82. return true;
    83. return false;
    84. }
    85. //assign函数
    86. void my_assign(int num,T val)
    87. {
    88. delete data;
    89. for(int i=0;i
    90. {
    91. data[i]=val;
    92. }
    93. }
    94. //at函数
    95. T & my_at(int i)
    96. {
    97. if(i<0||i>=num)
    98. throw int(1);
    99. return data[i];
    100. }
    101. //front函数
    102. T & my_front()
    103. {
    104. return data[0];
    105. }
    106. //back函数
    107. T & my_back()
    108. {
    109. return data[num-1];
    110. }
    111. //erase函数
    112. MyIterator my_erase(MyIterator loc)
    113. {
    114. for(int i=loc;i-1;i++)
    115. data[i]=data[i+1];
    116. num--;
    117. }
    118. //insert函数
    119. MyIterator my_insert(MyIterator loc,const T n)
    120. {
    121. //二倍扩容判断
    122. if(num==V_size)
    123. {
    124. V_size*=2;
    125. T *newdata=new T[V_size];
    126. for(int i=0;i
    127. newdata[i]=data[i];
    128. delete[] data;
    129. data=newdata;
    130. }
    131. for(int i=num;i>loc-1;i--)
    132. data[i]=data[i-1];
    133. data[loc]=n;
    134. num++;
    135. }
    136. //begin函数
    137. MyIterator my_begin()
    138. {
    139. return MyIterator(data);
    140. }
    141. //end函数
    142. MyIterator my_end()
    143. {
    144. return MyIterator(data+num-1);
    145. }
    146. //push_back函数
    147. void push_back(const T &val)
    148. {
    149. //二倍扩容判断
    150. if(num==V_size)
    151. {
    152. V_size*=2;
    153. T *newdata=new T[V_size];
    154. for(int i=0;i
    155. newdata[i]=data[i];
    156. delete[] data;
    157. data=newdata;
    158. }
    159. data[num]=val;
    160. num++;
    161. }
    162. //pop_back函数
    163. void pop_back()
    164. {
    165. if(my_empty())
    166. return;
    167. num--;
    168. }
    169. //size函数
    170. size_t my_size()
    171. {
    172. return num;
    173. }
    174. //max_size函数
    175. size_t my_max_size()
    176. {
    177. return V_size;
    178. }
    179. //swap函数
    180. void my_swap(myVector &from)
    181. {
    182. myVector temp=this;
    183. this=from;
    184. from=this;
    185. }
    186. };
    187. int main()
    188. {
    189. myVector<int>S1(5,10);
    190. cout<my_at(2)<
    191. S1.pop_back();
    192. S1.push_back(20);
    193. cout<my_back()<
    194. cout<<*S1.my_begin()<
    195. cout<my_size()<
    196. cout<my_max_size()<
    197. return 0;
    198. }

    运行结果:

    思维导图

  • 相关阅读:
    python3:split()分割字符串为字符/字符串列表 2023-11-20
    blender 快捷键记录
    在CIFAR-10数据集上构建ResNet-18模型(pytorch版)
    滚雪球学Java(44):掌握Java编程的关键:深入解析System类
    Monaco Editor编辑器
    合宙Air724UG LuatOS-Air LVGL API控件-窗口 (Window)
    【scikit-learn基础】--『监督学习』之 贝叶斯分类
    蘑菇街按关键字搜索mogujie商品 API 返回值说明
    63 x的平方根
    【JAVA】MyBatis-Plus插入/更新数据时如何自动更新字段时间
  • 原文地址:https://blog.csdn.net/cwj442257772/article/details/132888379