gpt4 book ai didi

c++ - 在 C++ 中实现通用 vector 类

转载 作者:行者123 更新时间:2023-11-28 04:47:06 30 4
gpt4 key购买 nike

我正在研究一个模板 vector 类,其中 vector 的大小没有预先定义。这是代码。

#include <iostream>

using namespace std;

template <class T>
class genericVector {
private:
int size;
T* arr;
public:
genericVector(): size(0), arr(0) {}
~genericVector() {
delete[] arr;
}
void insert_back(const T& value) {
arr[size++] = value;
}
void display() {
for (int i = 0; i < size; i++)
cout << arr[i];
cout << "\n";
}
};

int main() {
genericVector<int> v1;
int input;
for (int i = 0; i < 5; i++) {
cin >> input;
v1.insert_back(input);
}
v1.display();
return 0;
}

在VisualStudio中运行时,程序会触发如下断点。

Exception thrown: write access violation.

this->arr was 0x1110112.

If there is a handler for this exception, the program may be safely continued.

这里发生了什么?如果有人能澄清发生了什么,我将不胜感激。

最佳答案

代码 T* arr 声明了一个不指向任何内存地址的数组,即它的 null。

当您调用 insert_back() 方法时,它会尝试将一个元素添加到数组 arr[size++] = value 的末尾,这是无效的,因为您数组没有内存地址来存储插入元素的值。

您的构造函数需要通过 arr = new T[SIZE]; 语句为您尝试使用的数组动态分配内存。

最后,数组是固定大小的集合,不能自动调整大小,如果你需要向一个完全填满的数组添加元素,你需要为当前数组大小+1动态分配内存,并更改数组复制前一个数组的所有内容后指向新分配内存的指针。

关于c++ - 在 C++ 中实现通用 vector 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49063122/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com