在我的应用程序中,我想排序对象升序和降序。为此,我写了3个函数。它可能排序,但是当我想打印所有列表我有错误,如:访问冲突读取位置0x00000000。我认为这份清单是空的,但我不确定。有什么问题?总结:列表在排序后似乎是空的。 alghorytm的作品,但打印列表崩溃的功能。尝试打印列表信息时排序alghorytm崩溃
JednostkaMaszyny是一个基本的抽象类。
//这个函数负责寻找最大的list中的最低ID并将其返回值。
int static findID(JednostkaMaszyny*& headOfList, short numberOfObjects,bool ascending)
{
short i = 0;
int IDtoFind = 0;
JednostkaMaszyny* iterator;
iterator = headOfList;
/*if(rosnaco)
{
IDtoFind = 999999999;
}
else
{
IDtoFind = 0;
}*/
while(i < numberOfObjects)
{
if(!ascending){
if(iterator->getID() > IDtoFind)
{
IDtoFind = iterator->getID();
}
//i++;
//iterator = iterator->nextObject;
}
else
{
if(iterator->getID() < IDtoFind)
{
IDtoFind = iterator->getID();
}
}
i++;
iterator = iterator->nextObject;
}
return IDtoFind;
};
该函数接受指向主列表的指针,列表和ID中当前对象的数量。
static JednostkaMaszyny*& getObjectAtIDAndAssignItToSortedList(JednostkaMaszyny*& headOfList, short numberOfObjects, int ID)
{
short i = 0;
JednostkaMaszyny* iterator;
JednostkaMaszyny* returnedObject = NULL;
int tmpBoolNumber;
bool tmpBool = false;
iterator = headOfList;
while(i < iloscObiektow)
{
tmpBoolNumber = iterator->getBoolSorted();
if((iterator->getID() == ID) && tmpBoolNumber)
{
cout<<iterator->getID();
if(typeid(*iterator) == typeid(Desktop))
{
returnedObject = new Desktop(((Desktop*)iterator)->getwysokosc(),((Desktop*)iterator)->getDlugosc(),((Desktop*)iterator)->getSzerokosc(),((Desktop*)iterator)->getClockProcessor()
,((Desktop*)iterator)->getIdNumber(),((Desktop*)iterator)->getprocessorType(),((Desktop*)iterator)->getnameInNetwork(),((Desktop*)iterator)->getID());
//((Desktop*)iterator) -> setBoolSorted(1);
break;
}
else
{
returnedObject = new Laptop(((Laptop*)iterator)->getWagaLaptopa(),((Laptop*)iterator)->getClockProcessor(),((Laptop*)iterator)->getIdNumber(),((Laptop*)iterator)->getprocessorType(),
((Laptop*)iterator)->getnameInNetwork(),((Laptop*)iterator)->getID());
//((Laptop*)iterator) -> setBoolSorted(1);
break;
}
iterator->setBoolSorted(1);
}
i++;
iterator = iterator->nextObject;
}
//iterator->setID(1); I've tried to set attribute of object that it is already sorted but it fails here saying: Access fail to object.......
return returnedObject;
};
而最后一个函数。它是主要的“引擎”。它接受指向主列表的指针,指向列表中最后一个对象的对象数量和帮助指针。
void static sortListByUser(JednostkaMaszyny*& headOfList, short numberObjects, JednostkaMaszyny*& helpFullPointer)
{
JednostkaMaszyny* tmpSortedList = NULL;
JednostkaMaszyny* iterator;
short choice;
short numberOfObjects;
int tmpId;
numberOfObjects = numberObjects;
cout<<"1 - Ascending"<<endl;
cout<<"2 - Descending"<<endl;
cout<<"Your choice: "; cin>>choice;
if(choice == 1)
{
if(numberOfObjects > 0)
{
while(numberOfObjects > 0)
{
if(tmpSortedList == NULL)
{
tmpId = findID(headOfList,numberOfObjects,false);
tmpSortedList = getObjectAtIDAndAssignItToSortedList(headOfList,numberOfObjects,tmpId);
iterator = tmpSortedList;
//tmpSortedList->previousObject = NULL;
numberOfObjects--;
}
else
{
tmpId = findID(headOfList,numberOfObjects,false);
iterator->nextObject = getObjectAtIDAndAssignItToSortedList(headOfList,numberOfObjects,tmpId);
iterator->nextObject->previousObject = iterator;
iterator = iterator->nextObject;
numberOfObjects--;
}
//iterator->nextObject = NULL;
}
//iterator->
}
else
{
cout<<"LISTA JEST PUSTA"<<endl<<endl;
}
}
};
总之,简单的示例代码,只有为了演示一般原则,更喜欢像'JednostkaMaszyny'长,领域特定标识的短标识符,比如'Foo'。 –
应该在发布之前获得不必要的代码,例如,“短期选择”等。 –