• c++day7---9.14


     思维导图:

     

    1. #include
    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. size_t size;
    179. cout<<"请设置容器的最大容量:";
    180. cin>>size;
    181. myVector<int> vec(size);
    182. // 添加元素
    183. for (int i = 1; i <= 10; ++i) {
    184. vec.push_back(i);
    185. }
    186. // 访问和打印元素
    187. cout << "当前容器中的元素为: ";
    188. for (size_t i = 0; i < vec.getSize(); ++i) {
    189. cout << vec[i] << " ";
    190. }
    191. cout << endl;
    192. cout<<"当前容器的容量为:"<getMax_size()<
    193. // 测试 front 和 back 函数
    194. cout << "第一个元素为: " << vec.front() << endl;
    195. cout << "最后一个元素为: " << vec.back() << endl;
    196. // 删除最后一个元素
    197. vec.pop_back();
    198. // 访问和打印元素
    199. cout << "删除最后一个元素后容器中的元素为: ";
    200. for (size_t i = 0; i < vec.getSize(); ++i) {
    201. cout << vec[i] << " ";
    202. }
    203. cout << endl;
    204. int num;
    205. cout<<"请输入你要删除第几个元素:";
    206. cin>>num;
    207. // 删除指定位置的元素
    208. vec.erase(--num); // 删除第三个元素
    209. // 访问和打印元素
    210. cout << "执行删除后容器中的元素为: ";
    211. for (size_t i = 0; i < vec.getSize(); ++i) {
    212. cout << vec[i] << " ";
    213. }
    214. cout << endl;
    215. // 调整容器大小
    216. int a;
    217. cout<<"请输入你要设置的容器大小:";
    218. cin>>a;
    219. vec.resize(a);
    220. // 访问和打印元素
    221. cout << "调整容器大小后容器中的元素为: ";
    222. for (size_t i = 0; i < vec.getSize(); ++i) {
    223. cout << vec[i] << " ";
    224. }
    225. cout << endl;
    226. cout<<"当前容器的容量为:"<getMax_size()<
    227. // 测试 at 函数
    228. cout << "at(2) = " << vec.at(2) << endl;
    229. // 测试越界访问
    230. //cout << vec[20] << endl; // 会抛出异常
    231. return 0;
    232. }

  • 相关阅读:
    任务执行模型ACT-1,你的贴心小管家
    【C++】动静态库的生成与调用
    Games101笔记-计算机图形学概述
    818专业课【考经】—《信号系统》之章节概要:第五章 连续时间信号的变换域分析
    无量深度学习系统在推荐类业务中的应用
    pandas索引函数loc和iloc的区别
    Java 线程池手动创建示例及自我理解的解读 ThreadFactory手动创建示例
    003 PythonTCP网络通信
    Qt 如何多个项目共用相同代码
    在 SEO 中,一个好的网页必须具备哪些 HTML 标签和属性?
  • 原文地址:https://blog.csdn.net/yjh666jhy/article/details/132890340