为什么要使用 ChangeSize1D?

问题描述 投票:0回答:1

我了解了数据结构,我可以知道某些 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 个迭代器?

c++ arrays dynamic-memory-allocation new-operator function-definition
1个回答
0
投票

我认为你的意思是参数而不是迭代器。:)

在第一个函数(写得不好)中,用户可以指定数组的任何新大小,甚至小于数组的当前大小。

在第二个函数(也写得很糟糕)中有一个错误,因为而不是这个语句

T* temp = new T[currSize];

必须有

T* temp = new T[2 * currSize];

分配了一个新大小的数组,该数组的大小是当前数组大小的两倍。即新尺寸是根据当前尺寸的值自动计算的。

同样在第二个函数中,没有检查表达式

2 * currSize
是否会导致溢出。所以这个函数是不安全的。此外,说明符大小的参数应具有
size_t
类型而不是
int
,

© www.soinside.com 2019 - 2024. All rights reserved.