gpt4 book ai didi

c++ - 为什么这会给我一个访问冲突? (C++)

转载 作者:太空宇宙 更新时间:2023-11-04 16:13:02 26 4
gpt4 key购买 nike

我正在为我的数据结构类构建一个 vector 类,但我不明白为什么会抛出异常。这是完整的 Vector.h 文件:

#include <iostream>

using namespace std;

template <class T>
class Vector {
private:

// not yet implemented
Vector(const Vector& v);
Vector& operator=(const Vector& v);
T * Tarray;
int arraySize;
int currentSize;

public:

Vector() {
arraySize = 2;
currentSize = 0;
Tarray = new T[arraySize];
};
~Vector() {
delete[] Tarray;
};

void push_back(const T &e) {
++currentSize;
if (currentSize > arraySize) {
arraySize *= 4;
T * temp = new T[arraySize];

for (int i = 0; i < currentSize; i++) {
temp[i] = Tarray[i];
}

delete[] Tarray;
Tarray = new T[arraySize];

for (int j = 0; j < currentSize; j++) {
Tarray[j] = temp[j];
}

delete[] temp;

Tarray[currentSize - 1] = e;
}

else {
Tarray[currentSize - 1] = e;
}
};

void print() {
for (int i = 0; i < currentSize; i++) {
cout << Tarray[i] << " ";
}

};

int getCurrentSize() {
return currentSize;
};

int getArraySize() {
return arraySize;
};

// Not yet implemented
void pop_back();

int size() const;

T& operator[](int n);


};

这是我用来测试它的完整 main.cpp。

#include "Vector.h"
#include <iostream>
#include <string>

using namespace std;

int main() {
char c;

string * temp = new string[8];


Vector<string> newVector;

for (int i = 0; i < 8; i++) {
newVector.push_back("Hello world");
newVector.push_back("Hello world");
}

newVector.print();
cout << endl << "Current Size: " << newVector.getCurrentSize();
cout << endl << "Array Size: " << newVector.getArraySize();
cin >> c;
}

最佳答案

我会重写 push_back 如下:

void push_back(const T &e) {
if (currentSize+1 > arraySize) {
arraySize *= 4;
T * temp = new T[arraySize];

for (int i = 0; i < currentSize; i++) {
temp[i] = Tarray[i];
}

delete[] Tarray;
Tarray = temp;
}
Tarray[currentSize] = e;
++currentSize;
};

变化是:

  • 在复制内容之前不要更新 currentSize(这样就不会超出 Tarray 的范围)。
  • 不要分配和复制两次。将 Tarray 删除后分配给 temp 即可。
  • 只将元素粘贴到 Tarray 的一处。
  • 之后更新 currentSize,以避免必须执行 -1(它确实需要在第一个 if 中使用单个 +1 代替。

关于c++ - 为什么这会给我一个访问冲突? (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26089049/

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