如何实现数组扩容以避免顺序表满后无法添加元素?
时间: 2024-12-29 21:33:13 浏览: 9
在C++中,如果你正在使用动态数组(如`std::vector`或自定义数组),为了避免在顺序表满后无法添加新元素,你需要提供一种机制来进行扩容。这里有一个简单的例子:
**使用`std::vector`的例子**:
```cpp
#include <vector>
int main() {
std::vector<int> myArray;
// 添加元素时,如果已满
while (myArray.size() == capacity) {
// 容量通常是当前大小的两倍,你可以根据需要调整这个比例
myArray.reserve(myArray.size() * 2); // 预分配空间
}
myArray.push_back(42); // 此时可以安全地添加更多元素
return 0;
}
```
**自定义数组的例子**:
如果你有一个固定大小的数组并且希望在满了之后进行扩展,你可以创建一个新的更大的数组,然后复制旧的元素到新的数组中:
```cpp
template<typename T, size_t InitialCapacity>
class GrowingArray {
private:
T* data;
size_t capacity;
size_t size;
public:
GrowingArray(size_t initialSize = InitialCapacity)
: data(new T[initialSize]), capacity(initialSize), size(0) {}
void resize(size_t newSize) {
if (newSize >= capacity) {
T* newData = new T[newSize];
for (size_t i = 0; i < size; ++i)
newData[i] = data[i];
delete[] data;
data = newData;
capacity = newSize;
}
}
void add(T value) {
if (size == capacity)
resize(capacity * 2);
data[size++] = value;
}
~GrowingArray() { delete[] data; } // 虽然不是必需的,但确保正确释放内存
};
// 使用示例
GrowingArray<int, 10> array;
array.add(1);
array.add(2);
// ...
```
在这个例子中,每当数组达到其容量时,我们都会调用`resize`方法将其容量翻倍。
阅读全文