0

我正在尝试编写我自己的 C++ STL 向量版本<> 我希望它能够创建一个动态增长和收缩的列表...我希望拥有 push_back、push_front、pop_back、pop_front、remove、removeAt、clear 和大小......我写了所有这些几乎没有问题并且没有得到任何构建错误或警告,当我尝试实例化类时 Eclipse 告诉我它在令牌之后寻找维度......所以它认为我发送的任何类型都想要成为该类型的数组,例如...

    DynaArray<int> Bob;

这里它需要 int 之后的 [] 运算符。

这是我的班级目前的样子

    public class DynaArray<T>
{       
    int Size = 0;
    int CurrentCount = 0;
    int LastSpot = 0;
    T[] Array;

    DynaArray(int _size)
    {
        Size = _size;
    }

    @SuppressWarnings("unchecked")
    void push_back(T _element)
    {
        CurrentCount++;
        if(CurrentCount > Size)
        {
            //make a new array for double the size;
            if( Size == 0 )
            {
                Size = 2;
                Array = (T[]) new Object[Size];
            }
            else
            {
                int OldSize = Size;
                Size = Size*2;
                T[] TempArray;
                TempArray = (T[]) new Object[Size];
                int i = 0;
                for( ; i < OldSize; i++ )
                {
                    //Copy over info from Array to TempArray
                    TempArray[i] = Array[i];
                }
                Array = TempArray;
            }
        }

        //Now add the new element onto the array
        Array[LastSpot] = _element;
        LastSpot++;     

    }

    @SuppressWarnings("unchecked")
    void push_front(T _element)
    {
        CurrentCount++;
        if( Size == 0)
        {
            Size = 2;
            Array = (T[]) new Object[Size];
            Array[0] = _element;
            return;
        }
        else
        {
            int OldSize = Size;
            Size = Size+1;
            T[] TempArray;
            TempArray = (T[]) new Object[Size];
            int i = 1;
            for( ; i < OldSize; i++ )
            {
                //Copy over info from Array to TempArray
                TempArray[i] = Array[i-1];              
                Array = TempArray;
                Array[0] = _element;
            }           
    }

    }

    T pop_back()
    {
        if( CurrentCount <= 0)
            return null;
        else
        {
            return Array[CurrentCount-1];
        }

    }

    T pop_front()
    {
        if( CurrentCount <= 0)
            return null;
        else
        {
            return Array[0];
        }
    }

    int size()
    {
        return CurrentCount;
    }

    @SuppressWarnings("unchecked")
    void clear()
    {
        Size = 0;
        CurrentCount = 0;
        LastSpot = 0;
        Array = (T[]) new Object[2];

    }

    @SuppressWarnings("unchecked")
    void removeAt(int index)
    {
        T[] TempArray = (T[]) new Object[Size];
        int ArrayIndex = 0;
        for( int i = 0; i < CurrentCount; i++)
        {
            if( i == index )
                continue;

            TempArray[ArrayIndex] = Array[i];
            ArrayIndex++;

        }
    }

    void remove(T _element)
    {
        for(int i = 0; i < CurrentCount; i++)
        {
            //look for the element
            if( Array[i] == _element)
                removeAt(i);
        }
    }


}

感谢您提供的任何帮助,或者如果我的代码以某种方式对您有所帮助,欢迎您

4

2 回答 2

2

int是原语,因此不能与 Java 泛型一起使用。这样做的原因是为了保持字节码的向后兼容性(这在首次引入泛型时很重要)。您必须使用 anInteger代替。

注意,除非您将此作为学术练习,否则您可以/应该只使用 aList<T>而不是自定义实现的课程。

或者:使用Trove。

于 2012-05-10T18:22:52.297 回答
0

您不能将 Java 原语用作泛型类型,因为它们不是 Object 的实例。之所以int[]有效,是因为 Java 数组是一个对象。改用盒装的Integer

于 2012-05-10T18:23:08.453 回答