// test2.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream.h>
class item
{
public:
int x;
item* next;
item* prev;
};
class bullet
{
public:
float x,y,z;
float spd;
int l;
bullet* next;
bullet* prev;
};
template<typename item_>
class list
{
public:
item_* first;
item_* last;
//===================================================
list(){
first=NULL;
last=NULL;
}
//===================================================
item_* append()
{
item_* temp;
temp = new bullet;
if(!first){
first=temp;
first->prev=NULL;
first->next=NULL;
}else{
if(!last){
last=temp;
first->next=last;
last->prev=first;
last->next=NULL;
}else{
temp->next=NULL;
temp->prev=last;
last->next=temp;
last=temp;
}
}
return temp;
}
//==================================================
item_* crash(item_* el)
{
if((!(el->next)) && (!(el->prev)))
{
first=NULL;
last=NULL;
delete el;
return NULL;
}else
{
if(!(el->next))
{
if(el->prev){
el->prev->next=NULL;
last=el->prev;}
}else{
if(!(el->prev)){
if(el->next){
el->next->prev=NULL;
first=el->next;}
}else{
el->next->prev=el->prev;
el->prev->next=el->next;
}
}
item_* ret;
if (el->prev){ret=el->prev;}else{ret=NULL;}
delete el;
return ret;
}
}
};
int main(int argc, char* argv[])
{
list<bullet> l;
l.append()->x=34;
l.append()->x=10;
l.append()->x=18;
l.append()->x=20;
l.append()->x=30;
l.append()->x=34;
l.append()->x=21;
printf("Hello World!\n");
for (bullet* e=l.first;e;e=e->next)
{
cout<<e->x<<endl;
}
for (e=l.first;e;e=e->next)
{
if((e->x)<25){e=l.crash(e);}
}
printf("===========================================\n");
for (e=l.first;e;e=e->next)
{
cout<<e->x<<endl;
}
cout<<endl<<"enter char"<<endl;
char h;
cin>>h;
return 1;
}
короче появилась идея, нафиг не шаблонить item а создаавать совершенно новый класс, прчием две строчки-
<имя класса*>prev
<имя класса*>next
все же придеться вручную набирать, не могу пока придумать как это автоматизировать.
а List зашаблонить так, чтобы в качестве типа указывать класс, (bullet) например.
пример выше.
ЗЫ. Криво работает удаление (удаление в переборе)