z__y 2022-11-16 02:48 采纳率: 88.9%
浏览 12
已结题

Vector类实现,动态内存下标越界

Vector类实现,动态内存下标越界
这是另一个博主的代码,我的疑惑是,如果输入的n超过初始设置的100,add()函数里不会造成下标越界吗

  1. template <class T>
  2. class Vector
  3. {
  4. private:
  5. int pos;
  6. int size = 100;
  7. T* data;
  8. public:
  9. Vector() {
  10. pos = 0;
  11. data = new T[size];
  12. }
  13. int add(T m) {
  14. data[pos]=m;
  15. pos++;
  16. return pos-1;
  17. }
  18. int get_size() { return pos; }
  19. void remove(int m) {
  20. for (int i = m; i < pos-1; i++) {
  21. data[i] = data[i + 1];
  22. }
  23. pos--;
  24. }
  25. const T& operator[](int index)const
  26. {
  27. return data[index];
  28. }
  29. };
  30. ————————————————
  31. 版权声明:本文为CSDN博主「我不想起名字呀」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
  32. 原文链接:https://blog.csdn.net/qq_47867028/article/details/117336559
  33. int main()
  34. {
  35. Vector<int> vint;
  36. int n, m;
  37. cin >> n >> m;
  38. for (int i = 0; i < n; i++) {
  39. // add() can inflate the vector automatically
  40. vint.add(i);
  41. }
  42. // get_size() returns the number of elements stored in the vector
  43. cout << vint.get_size() << endl;
  44. cout << vint[m] << endl;
  45. // remove() removes the element at the index which begins from zero
  46. vint.remove(m);
  47. cout << vint.add(-1) << endl;
  48. cout << vint[m] << endl;
  49. Vector<int> vv = vint;
  50. cout << vv[vv.get_size() - 1] << endl;
  51. vv.add(m);
  52. cout << "vint size:" << vint.get_size() << endl;
  53. cout << "vv size:" << vv.get_size() << endl;
  54. cout << vint.get_size() << endl;
  55. }

展开全部

  • 写回答

3条回答 默认 最新

  • 关注

    size在构造函数里初始化
    size=10放在构造函数里。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    z__y 2022-11-16 04:03

    这个我改正过了,这是那个博主的源代码,我比较疑惑的是,不会越界吗,在add函数里

    回复
    技术专家团-小桥流水 回复 z__y 2022-11-16 04:06

    回的,严谨一些的话,在add的时候,需要先判断pos是否大于size了,如果大了,需要重新分配内存,或者返回失败

    回复
    技术专家团-小桥流水 回复 z__y 2022-11-16 04:08

    最好改一下add函数,下面是判断是否越界的,如果已经满了,返回-1。当然,也可以重新分配一下内存。

    1. int add(T m) {
    2. if (pos >= size)
    3. return -1;
    4. data[pos] = m;
    5. pos++;
    6. return pos - 1;
    7. }

    回复
    展开全部12条评论
查看更多回答(2条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 11月27日
  • 已采纳回答 11月20日
  • 创建了问题 11月16日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部