• 2023/09/14 qt&c++


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

    1. #include
    2. using namespace std;
    3. template <typename V>
    4. class myVector
    5. {
    6. private:
    7. V *data; //存放数据
    8. int size; //数组长度
    9. int capacity; //容量大小
    10. public:
    11. myVector():size(0),capacity(1)
    12. {
    13. data = new V[capacity];
    14. cout<<"无惨构造"<
    15. }
    16. ~myVector()
    17. {
    18. delete []data;
    19. cout<<"析构函数"<
    20. }
    21. //判空
    22. bool empty();
    23. //返回指定的位置
    24. V& at(int index);
    25. //尾插
    26. void push_back(int value);
    27. //尾删
    28. void pop_back();
    29. //任意位置插入
    30. void insert(int pos,const V &value);
    31. //当前元素个数
    32. int get_size();
    33. //二倍扩容
    34. int expandCapacity();
    35. };
    36. //判空
    37. template <typename V>
    38. bool myVector::empty()
    39. {
    40. return size==0;
    41. }
    42. //当前元素的个数
    43. template <typename V>
    44. int myVector::get_size()
    45. {
    46. return size;
    47. }
    48. //二倍扩容
    49. template <typename V>
    50. int myVector::expandCapacity()
    51. {
    52. capacity *= 2;
    53. V *newdata = new V[capacity]; //定义一个新的指针指向原来的空间
    54. for(int i=0;i
    55. {
    56. newdata[i] = data[i];
    57. }
    58. delete []data; //将原来的空间释放掉
    59. data = newdata; //再把原来的指针更新为newdata,并且data指向了新的空间
    60. return capacity;
    61. }
    62. //尾插
    63. template <typename V>
    64. void myVector::push_back(int value)
    65. {
    66. if(size>=capacity)
    67. {
    68. expandCapacity(); //调用一次二倍扩容
    69. }
    70. data[size] = value;
    71. size++;
    72. }
    73. //尾删
    74. template <typename V>
    75. void myVector::pop_back()
    76. {
    77. if(size>0)
    78. {
    79. size--;
    80. }
    81. }
    82. //返回指定的位置
    83. template <typename V>
    84. V& myVector::at(int index)
    85. {
    86. if(index<0||index>=size)
    87. {
    88. throw V(1);
    89. }
    90. return data[index];
    91. }
    92. //任意位置插入
    93. template <typename V>
    94. void myVector::insert(int pos,const V &value)
    95. {
    96. if(pos<0||pos>size)
    97. {
    98. throw V("pos");
    99. }
    100. if(size>=capacity)
    101. {
    102. expandCapacity(); //调用一次二倍扩容
    103. }
    104. for(int i=size;i>pos;i--)
    105. {
    106. data[i+1] = data[i]; //整体后移
    107. }
    108. data[pos] = value;
    109. size++;
    110. }
    111. int main()
    112. {
    113. int i;
    114. myVector<int> v1;
    115. cout<empty()<//1
    116. v1.push_back(80);
    117. v1.push_back(90);
    118. v1.push_back(5);
    119. for(i=0;i<static_cast<int>(v1.get_size());i++)
    120. {
    121. cout<at(i)<<" ";
    122. }
    123. cout<
    124. cout<empty()<
    125. cout<<"v1.cap = "<expandCapacity()<
    126. v1.push_back(80);
    127. v1.push_back(90);
    128. v1.push_back(5);
    129. cout<<"v1.cap = "<expandCapacity()<
    130. return 0;
    131. }

  • 相关阅读:
    GlassFish内存马分析
    QT day1
    .L0CK3D来袭:如何保护您的数据免受致命攻击
    力扣:19-删除链表的倒数第N个结点
    ios ipa包上传需要什么工具
    【Unity入门计划】基本概念(6)-精灵渲染器 Sprite Renderer
    超前进位加法器
    alb和clb区别
    避坑手册 | JAVA编码中容易踩坑的十大陷阱
    C语言——经典200道实例(11-15)
  • 原文地址:https://blog.csdn.net/cscssacd/article/details/132890542