C++实现动态顺序表(2)

public:
    void PushBack(const DataType& data)
    {
        _CheckCapacity();
        _array[_size++] = data;
    }
    void PopBack()
    {
        assert(!Empty());
        --_size;
    }
    void Print()
    {
        for (size_t i = 0; i < _size; ++i)
        {
            cout << _array[i] << " ";
        }
        cout << endl;
    }
    // 给顺序表重新赋值,该函数执行完里面存放了n个元素data
    void Assign(size_t n, const DataType& data)
    {
        assert(n<_size);   
        for (size_t i = 0; i<n; i++)
            _array[i] = data;
    }

// 在顺序表的pos位置上插入元素data
    void Insert(size_t pos, const DataType& data)
    {
        assert(pos<_size);    //需检验pos的合法性
        _CheckCapacity();
        if (pos == _size - 1)  //在最后一个位置插入数据等于尾插
        {
            PushBack(data);
            return;
        }
        else
        {
            for (size_t i = _size; i > pos; --i)
            {
                _array[i] = _array[i - 1];
            }
            _array[pos] = data;
            _size++;
        }
    }

// 删除顺序表pos位置上的元素
    void Erase(size_t pos)
    {
        assert(pos<_size);    //需检验pos的合法性
        if (pos == _size - 1)  //在最后一个位置删除数据等于尾删
        {
            PopBack();
            return;
        }
        else
        {
            for (size_t i = pos; i < _size - 1; i++)
            {
                _array[i] = _array[i + 1];
            }
            --_size;
        }       
    }

// 改变顺序表中的元素为n个,如果n>原来顺序表中的元素的个数,多出来的空间
    // 请用data来填充
    void ReSize(size_t n, const DataType& data = DataType())
    {
        if (n > _size)
        {
            size_t i = _size;
            _size = n;
            _CheckCapacity();
            for (i; i < n; i++)
                _array[i] = data;
        }
        else
        {
            size_t i = n;
            for(i; i<_size; i++)
                PopBack();
        }
    }

// 清空顺序表中的元素-->请自己动手验证是否需要清理vector中的空间
    void Clear()
    {
        delete[] _array;
        _array = NULL;
        _size = 0;
        _capacity = 0;
    }
    // 返回顺序表中有效元素的大小
    size_t Size()const
    {
        return _size;
    }
    // 返回顺序表中空间容量的大小
    size_t Capacity()const
    {
        return _capacity;
    }
    // 顺序表是否为空,若为空返回true,否则返回null
    bool Empty()const
    {
        return _size == 0;
    }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/101be81210ae251c7a2c9147cc05d6eb.html