• 华清 c++ day7 9月14


    1. #include <iostream>
    2. using namespace std;
    3. template<typename T>
    4. class myVector
    5. {
    6. private:
    7. T* arr;
    8. size_t size; //元素数量
    9. size_t max_size; //数组容量
    10. public:
    11. //构造函数
    12. myVector() :arr(nullptr), size(0), max_size(0) {}
    13. myVector(int size)
    14. {
    15. if (size > 0)
    16. {
    17. this->max_size = size;
    18. this->arr = new T[max_size];
    19. this->size = 0;
    20. cout << "容量设置成功" << endl;
    21. }
    22. if (size < 0)
    23. {
    24. throw double(1);
    25. }
    26. }
    27. myVector(const myVector& other) :size(other.size), max_size(other.max_size)
    28. {
    29. if (this != &other)
    30. {
    31. arr = new T[max_size];
    32. for (size_t i = 0; i < size; i++)
    33. {
    34. arr[i] = other.arr[i];
    35. }
    36. }
    37. }
    38. //析构函数
    39. ~myVector()
    40. {
    41. delete[] arr;
    42. }
    43. //获取当前元素的个数
    44. size_t getSize()const
    45. {
    46. return size;
    47. }
    48. //获取当前容量
    49. size_t getMax_size()const
    50. {
    51. return max_size;
    52. }
    53. //返回最后一个元素
    54. T back()const
    55. {
    56. return arr[size - 1];
    57. }
    58. //判空
    59. bool isEmpty()
    60. {
    61. return size == 0;
    62. }
    63. //尾插
    64. void push_back(const T& value)
    65. {
    66. if (size >= max_size)
    67. {
    68. //进行扩容
    69. size_t new_max_size = (max_size == 0) ? 1 : max_size * 2;
    70. T* newArr = new T[new_max_size];
    71. for (size_t i = 0; i < size; i++)
    72. {
    73. newArr[i] = arr[i];
    74. }
    75. delete[] arr;
    76. arr = newArr;
    77. max_size = new_max_size;
    78. }
    79. arr[size++] = value;
    80. }
    81. //返回指定位置的元素
    82. T& operator[](size_t index)
    83. {
    84. if (index >= size)
    85. {
    86. throw double(3);
    87. }
    88. return arr[index];
    89. }
    90. //at函数
    91. T& at(size_t index)const
    92. {
    93. if (index < size)
    94. {
    95. return arr[index];
    96. }
    97. else
    98. {
    99. throw double(4);
    100. }
    101. }
    102. //删除最后一个元素
    103. void pop_back()
    104. {
    105. if (!isEmpty())
    106. {
    107. --size;
    108. }
    109. }
    110. //删除任意元素
    111. void erase(size_t index)
    112. {
    113. if (index >= size)
    114. {
    115. throw double(5);
    116. }
    117. for (size_t i = index; i < size - 1; ++i)
    118. {
    119. arr[i] = arr[i + 1];
    120. }
    121. --size;
    122. //可以减少数组的容量
    123. if (size < max_size / 4)
    124. {
    125. size_t new_max_size = max_size / 2;
    126. T* newArr = new T[new_max_size];
    127. for (size_t i = 0; i < size; ++i)
    128. {
    129. newArr[i] = arr[i];
    130. }
    131. delete[] arr;
    132. arr = newArr;
    133. max_size = new_max_size;
    134. }
    135. }
    136. //返回第一个元素
    137. T front()const
    138. {
    139. return arr[0];
    140. }
    141. //调整容器的大小
    142. void resize(size_t newSize)
    143. {
    144. if (newSize < 0)
    145. {
    146. throw double(7);
    147. }if (newSize == size)
    148. {
    149. return;
    150. }
    151. if (newSize < size)
    152. {
    153. size = newSize;
    154. }
    155. else
    156. {
    157. if (newSize > max_size)
    158. {
    159. // 如果新大小大于容量,需要重新分配内存
    160. size_t new_max_size = (newSize > max_size* 2) ? newSize : max_size * 2;
    161. T* newArr = new T[new_max_size];
    162. for (size_t i = 0; i < size; ++i)
    163. {
    164. newArr[i] = arr[i];
    165. }
    166. delete[] arr;
    167. arr = newArr;
    168. max_size = new_max_size;
    169. }
    170. while (size < newSize)
    171. {
    172. push_back(T());
    173. }
    174. }
    175. }
    176. };
    177. int main() {
    178. try {
    179. size_t size;
    180. cout<<"请设置容器的最大容量:";
    181. cin>>size;
    182. myVector<int> vec(size);
    183. // 添加元素
    184. for (int i = 1; i <= 10; ++i) {
    185. vec.push_back(i);
    186. }
    187. // 访问和打印元素
    188. cout << "当前容器中的元素为: ";
    189. for (size_t i = 0; i < vec.getSize(); ++i) {
    190. cout << vec[i] << " ";
    191. }
    192. cout << endl;
    193. cout<<"当前容器的容量为:"<<vec.getMax_size()<<endl;
    194. // 测试 front 和 back 函数
    195. cout << "第一个元素为: " << vec.front() << endl;
    196. cout << "最后一个元素为: " << vec.back() << endl;
    197. // 删除最后一个元素
    198. vec.pop_back();
    199. // 访问和打印元素
    200. cout << "删除最后一个元素后容器中的元素为: ";
    201. for (size_t i = 0; i < vec.getSize(); ++i) {
    202. cout << vec[i] << " ";
    203. }
    204. cout << endl;
    205. int num;
    206. cout<<"请输入你要删除第几个元素:";
    207. cin>>num;
    208. // 删除指定位置的元素
    209. vec.erase(--num); // 删除第三个元素
    210. // 访问和打印元素
    211. cout << "执行删除后容器中的元素为: ";
    212. for (size_t i = 0; i < vec.getSize(); ++i) {
    213. cout << vec[i] << " ";
    214. }
    215. cout << endl;
    216. // 调整容器大小
    217. int a;
    218. cout<<"请输入你要设置的容器大小:";
    219. cin>>a;
    220. vec.resize(a);
    221. // 访问和打印元素
    222. cout << "调整容器大小后容器中的元素为: ";
    223. for (size_t i = 0; i < vec.getSize(); ++i) {
    224. cout << vec[i] << " ";
    225. }
    226. cout << endl;
    227. cout<<"当前容器的容量为:"<<vec.getMax_size()<<endl;
    228. // 测试 at 函数
    229. cout << "at(2) = " << vec.at(2) << endl;
    230. // 测试越界访问
    231. //cout << vec[20] << endl; // 会抛出异常
    232. }
    233. catch (double e) {
    234. cout << "Error: " << e << endl;
    235. }
    236. return 0;
    237. }

    脑图

  • 相关阅读:
    京东云开发者|经典同态加密算法Paillier解读 - 原理、实现和应用
    物体结构图,快速图解物体内部结构
    十五、ROS的launch文件标签(一)
    K8s(Kubernetes)学习(五)——Service:ClusterIP、NodePort、LoadBalancer、 ExternalName
    【2022 必读书单&必看视频】计算机图形学 实时渲染 光传输模拟 动态变形 流体仿真 音视频开发 游戏引擎
    Flutter 渲染机制——GPU线程渲染
    spring-aop源码分析(2)_AnnotationAwareAspectJAutoProxyCreator后置处理器
    神经网络中BN层简介及位置分析
    element ui 时间筛选样式遮盖问题修复
    计算机视觉+人工智能面试笔试总结——深度学习基础题41~51
  • 原文地址:https://blog.csdn.net/Huxiao1220/article/details/132889797