📜  门| GATE-CS-2000 |问题 12(1)

📅  最后修改于: 2023-12-03 14:58:24.461000             🧑  作者: Mango

门 | GATE-CS-2000 | 问题 12

本题为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中的一个强大而又实用的容器类,可以帮助我们快速实现动态数组的各种操作。