我正在尝试编写自己的C ++ STL向量版本<>我希望它能够生成一个动态增长和缩小的列表...我想拥有push_back,push_front,pop_back,pop_front,remove,removeAt,clear和size的方法......我写的所有这些都没有什么问题我得到了没有构建错误或警告,当我尝试实例化类时,Eclipse告诉我它在标记之后寻找Dimensions ...所以它认为我发送的任何类型都想成为该类型的数组,例如...
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);
}
}
}
感谢您提供的任何帮助,或者如果我的代码以某种方式帮助您,欢迎
答案 0 :(得分:2)
int
是一个基元,因此cannot be used with Java generics。原因是maintain the bytecode's backwards compatibility(这在首次引入仿制药时很重要)。您必须使用Integer
代替。
N.B。除非您将此作为学术练习,否则您可以/应该使用List<T>
代替自定义实施的课程。
或者:使用Trove.
答案 1 :(得分:0)
您不能将Java基元用作通用类型,因为它们是not instances of Object。 int[]
工作的原因是因为Java数组是一个对象。请使用带框的Integer
代替。