我了解了数据结构,我可以知道某些 ChangeSize 方式
template<class T>
void ChangeSize1D(T*& a, const int oldSize, const int newSize) {
if (newSize < 0) throw "New Length must be >=0";
T* temp = new T[newSize];
int number = min(oldSize, newSize);
copy(a, a + number, temp);
delete[]a;
a = temp;
}
参考 但我想我不知道为什么它需要 3 个迭代器
template<class T>
void ChangeSize1D(T*& a, const int currSize) {
if (currSize * 2 < 0) throw "New Length must be >=0";
T* temp = new T[currSize];
copy(a, a + currSize, temp);
delete[]a;
a = temp;
}
像这样只采用当前尺寸和拉伸长度是我认为更有效的方式 为什么示例使用 3 个迭代器?
我认为你的意思是参数而不是迭代器。:)
在第一个函数(写得不好)中,用户可以指定数组的任何新大小,甚至小于数组的当前大小。
在第二个函数(也写得很糟糕)中有一个错误,因为而不是这个语句
T* temp = new T[currSize];
必须有
T* temp = new T[2 * currSize];
分配了一个新大小的数组,该数组的大小是当前数组大小的两倍。即新尺寸是根据当前尺寸的值自动计算的。
同样在第二个函数中,没有检查表达式
2 * currSize
是否会导致溢出。所以这个函数是不安全的。此外,说明符大小的参数应具有 size_t
类型而不是 int
,