C ++自定义数组容器动态大小

时间:2017-10-24 11:50:03

标签: c++ arrays containers

对于学校作业,我想构建一个自定义数组容器,因为我不允许使用std或任何可用库提供的容器,而允许自制。

到目前为止,我所拥有的一切正在发挥作用,但是一旦达到极限,我想要将数组大小加倍。我怎么能这样做,我能找到的只是使用矢量(我不允许)。

#ifndef UTILS_ARRAY_HEADER_INCLUDED
#define UTILS_ARRAY_HEADER_INCLUDED

#include <array>

namespace utils
{
    template <class T>
    struct Array
    {

    private:
        int count = 0;
        int size = 1;

        std::array<T, 1> myArray;
        void doubleSize();
    public:
        T* begin();
        T* end();
        T& operator[] (int);
        void addItem(T const);
    };

    template <class T>
    T* Array<T>::begin()
    {
        return &myArray[0];
    }

    template <class T>
    T* Array<T>::end()
    {
        if (&myArray[count])
            return &myArray[count];
        return &myArray[0];
    }

    template <class T>
    T& Array<T>::operator[] (int key)
    {
        return myArray[key];
    }

    template <class T>
    void Array<T>::addItem(T const item)
    {
        if (count >= 0 && count < size)
        {
            myArray[count] = item;
            count++;
        }
        else {
            doubleSize();
        }

        return;
    }

    template <class T>
    void Array<T>::doubleSize()
    {
        // ?
        /*size = size * 2; 
        const int newsize = 2;
        std::array<T, newsize> newArray; // not working.
        std::copy(std::begin(myArray), std::end(myArray), std::begin(newArray));
        myArray = newArray;*/
    }
}

#endif

2 个答案:

答案 0 :(得分:1)

您需要属性:

  • 当前容量:int
  • 当前大小(最大使用索引):int
  • 指向您数据的指针:T *

在AddItem中检查current_size&lt; current_capacity。如是, 创建大小为currernt_capacity * 2的new_data,复制每个项目,删除旧数据并替换指针。

记得要删除数据;在析构函数中。我不会给你更多的代码,这是你的功课。

结帐valgrind以检查您的代码是否没有泄漏内存。

答案 1 :(得分:0)

我怀疑std::array<T, 1>也不允许。但这不是一个真正的问题:你无论如何都不能使用array,因为它有一个固定的大小。

您需要存储T* beginsize_t current_sizesize_t size_in_use