• MyVector 的实现


    myVector

    1. #include <iostream>
    2. #include <vector>
    3. int size2=0;
    4. using namespace std;
    5. template <typename type>
    6. class myvector
    7. {
    8. int size;
    9. type value;
    10. type *arr;
    11. public:
    12. //无参构造
    13. myvector(){};
    14. //有参构造
    15. myvector(int s,type v):size(s),value(v)
    16. {
    17. arr=new int[size];
    18. for(int i=0;i<size;i++)
    19. {
    20. arr[i]=value;
    21. }
    22. }
    23. //拷贝构造
    24. myvector(const myvector&other):size(other.size),value(other.value)
    25. {
    26. memcpy(this->arr,other.arr,size);
    27. }
    28. //析构函数
    29. ~myvector()
    30. {
    31. delete [] arr;
    32. arr=nullptr;
    33. }
    34. //求容器的大小
    35. type my_capacity();
    36. //添加元素
    37. void my_push(const type & value);
    38. //展示元素
    39. void show();
    40. //求容器的真实大小
    41. type my_size();
    42. //访问容器中的元素
    43. type my_at(type local);
    44. //给容器中的元素赋值
    45. void my_assign(int size,const type &value);
    46. //返回起始位置的引用
    47. type my_front();
    48. //返回最后一个位置的引用
    49. type my_back();
    50. //返回起始元素的迭代器
    51. type *my_begin();
    52. //返回末尾下一个位置的迭代器
    53. type *my_end();
    54. //指定位置的插入
    55. type *my_insert(type local,const type &value);
    56. //清空容器中的元素
    57. void my_clear();
    58. //判空函数
    59. bool my_empty();
    60. };
    61. //求容器的大小
    62. template <typename type>
    63. type myvector<type>::my_capacity()
    64. {
    65. return size;
    66. }
    67. //添加元素
    68. template <typename type>
    69. void myvector<type>::my_push(const type & value)
    70. {
    71. //将初始化的size赋值给size2
    72. if(size2==0)
    73. {
    74. size2=size;
    75. }
    76. if(size2>=size)
    77. {
    78. size2=size;
    79. size=size*2; //二倍扩容
    80. }
    81. if(size2<=size)
    82. {
    83. size2++;
    84. }
    85. arr[size2-1]=value;
    86. cout<<"添加成功"<<endl;
    87. }
    88. //展示元素
    89. template <typename type>
    90. void myvector<type>::show()
    91. {
    92. for(int i=0;i<size2;i++)
    93. {
    94. cout<<arr[i]<<"\t";
    95. }
    96. cout<<endl;
    97. }
    98. //求容器的真实大小
    99. template <typename type>
    100. type myvector<type>::my_size()
    101. {
    102. int size3=size2;
    103. return size3;
    104. }
    105. //访问容器中的元素
    106. template <typename type>
    107. type myvector<type>::my_at(type local)
    108. {
    109. return arr[local];
    110. }
    111. //给容器中的元素赋值
    112. template <typename type>
    113. void myvector<type>::my_assign(int num,const type &value)
    114. {
    115. for(int i=num-1;i>=0;i--)
    116. {
    117. arr[i]=value;
    118. }
    119. }
    120. //返回起始位置的引用
    121. template <typename type>
    122. type myvector<type>::my_front()
    123. {
    124. return arr[0];
    125. }
    126. //返回最后一个位置的引用
    127. template <typename type>
    128. type myvector<type>::my_back()
    129. {
    130. return arr[size2-1];
    131. }
    132. //返回起始元素的迭代器
    133. template <typename type>
    134. type* myvector::my_begin()
    135. {
    136. type *ptr=arr;
    137. return ptr;
    138. }
    139. //返回末尾下一个位置的迭代器
    140. template <typename type>
    141. type* myvector::my_end()
    142. {
    143. type *ptr1=(arr+size2-1);
    144. return ptr1;
    145. }
    146. //指定位置的插入
    147. template <typename type>
    148. type *myvector::my_insert(type local,const type &value)
    149. {
    150. size2++;
    151. for(int i=size-1;i>=local;i--)
    152. {
    153. arr[i+1]=arr[i];
    154. }
    155. //插入
    156. type *ptr2=(arr+local);
    157. *ptr2=value;
    158. return ptr2;
    159. }
    160. //清空容器中的元素
    161. template <typename type>
    162. void myvector<type>::my_clear()
    163. {
    164. size2=0;
    165. cout<<"清空成功"<<endl;
    166. }
    167. //判空函数
    168. template <typename type>
    169. bool myvector<type>::my_empty()
    170. {
    171. if(size2==0)
    172. return 1;
    173. else
    174. return 0;
    175. }
    176. int main()
    177. {
    178. //初始化
    179. myvector<int> V1(5,7);
    180. //容器大小
    181. cout<<"容器大小为:"<<V1.my_capacity()<<endl;
    182. //添加元素
    183. V1.my_push(8);
    184. V1.my_push(8);
    185. V1.my_push(8);
    186. //展示元素
    187. V1.show();
    188. //真实大小
    189. cout<<"真实大小:"<<V1.my_size()<<endl;
    190. //访问容器中的元素
    191. cout<<V1.my_at(4)<<endl;
    192. //给容器中的元素赋值
    193. V1.my_assign(5,9);
    194. V1.show();
    195. //返回起始位置的引用
    196. cout<<"起始元素为:"<<V1.my_front()<<endl;
    197. //返回最后一个位置的引用
    198. cout<<"最后位置元素为:"<<V1.my_back()<<endl;;
    199. //返回起始元素的迭代器
    200. int *p;
    201. p=V1.my_begin();
    202. cout<<"起始元素为:"<<*p<<endl;
    203. //返回末尾下一个位置的迭代器
    204. int *p1;
    205. p1=V1.my_end();
    206. cout<<"最后位置元素为:"<<*p1<<endl;
    207. //指定位置的插入
    208. V1.my_insert(2,3);
    209. V1.show();
    210. //判空
    211. cout<<V1.my_empty()<<endl;;
    212. return 0;
    213. }

    2、思维导图

  • 相关阅读:
    Linux网络编程- ether_header & iphdr & tcphdr
    机器学习初步-笔记
    yml语法学习 SpringBoot配置文件自动装配 yml文件有提示读取配置文件
    【Android】View 与 ViewGroup
    SpringBoot中@Autowired注解
    SpringBoot整合sql数据源
    形式逻辑简介
    48、Nio(Io模型(异步(异步和同步)))
    【MATLAB】史上最全的5种数据插值算法全家桶
    一周成功拿下4个offer的软件测试面试题,面试必看系列
  • 原文地址:https://blog.csdn.net/Venusler/article/details/132893573