📅  最后修改于: 2023-12-03 14:58:24.461000             🧑  作者: Mango
本题为2000年度计算机科学领域工程资格考试(GATE-CS-2000)的第12题。
一个动态数组是一个可以自动扩展容量的数组。即在向数组中添加元素时,若容量不足,数组会自动增加容量。数组底层存储结构采用连续的内存地址。
动态数组需要完成以下函数:
push
:添加一个元素到数组的尾部。pop
:删除数组尾部的元素,并返回该元素。size
:返回数组当前的元素个数。capacity
:返回数组当前的容量。at
:返回指定索引处的元素。若索引越界,则抛出异常。请你使用C++语言完成该动态数组的实现。
动态数组的实现可以利用C++的std::vector容器。std::vector实现了一个动态数组,提供了push_back()、pop_back()、size()、capacity()和at()等常用成员函数。
std::vector的底层实现是连续的内存地址,当容量不足时,会自动扩容,将存储空间重新分配到更大的一块内存上,然后将原有数据复制到新空间,再释放原空间。
以下是动态数组的实现代码:
#include <vector>
class DynamicArray {
public:
// 添加一个元素到数组尾部
void push(int elem) {
arr_.push_back(elem);
}
// 删除数组尾部的元素,并返回该元素
int pop() {
int elem = arr_.back();
arr_.pop_back();
return elem;
}
// 返回数组当前的元素个数
int size() const {
return arr_.size();
}
// 返回数组当前的容量
int capacity() const {
return arr_.capacity();
}
// 返回指定索引处的元素。若索引越界,则抛出异常。
int at(int idx) const {
if (idx < 0 || idx >= arr_.size()) {
throw std::out_of_range("Invalid index");
}
return arr_[idx];
}
private:
std::vector<int> arr_; // 底层动态数组
};
本题考察了动态数组的实现方法,以及如何使用C++的std::vector实现动态数组。std::vector是C++STL中的一个强大而又实用的容器类,可以帮助我们快速实现动态数组的各种操作。