簡體   English   中英

C ++自定義數組容器的動態大小

[英]C++ custom array container dynamic size

對於學校作業,我想構建一個自定義數組容器,因為不允許使用std或任何可用庫提供的容器,而允許自制。

到目前為止,我所擁有的一切都在工作,但是我想在達到極限后立即將陣列大小加倍。 我該怎么做,我所能找到的就是使用vector(不允許這樣做)。

#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

您需要屬性:

  • 當前容量:整數
  • 當前大小(最大使用索引):int
  • 指向您的數據的指針:T *

在AddItem中檢查current_size <current_capacity。 如果是,請創建新數據,其大小為currernt_capacity * 2,復制每個項目,刪除舊數據並替換指針。

記住要刪除數據; 在析構函數中。 我不會給您更多代碼,這是您的作業。

檢查valgrind以檢查您的代碼是否不會泄漏內存。

我懷疑std::array<T, 1>也不被允許。 但這不是一個真正的問題:因為array具有固定的大小,所以無論如何都不能使用array

您需要存儲一個T* begin ,一個size_t current_size和一個size_t size_in_use

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM