|
09.04.2007, 21:49
|
#16
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Списки данных
спасибо Knightmare
не, item ненадо шаблонить. это базовый класс от него будем плясать при создании элементов для списков.
а вот list надо зашоблонить чтобы можно было юзать новоиспеченные классы - потомки item'a.
|
(Offline)
|
|
09.04.2007, 23:59
|
#17
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
Re: Списки данных
При твоей структуре item шаблонить надо. Непонятно только, какие от него могут быть потомки.
|
(Offline)
|
|
10.04.2007, 01:18
|
#18
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Списки данных
// 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) например.
пример выше.
ЗЫ. Криво работает удаление (удаление в переборе)
|
(Offline)
|
|
10.04.2007, 01:23
|
#19
|
Дэвелопер
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений (для 2,920 пользователей)
|
Re: Списки данных
как вариант - шаблонить list и передавать туды класс любой но чтобы он имел поля next и prev =) хз бует или нет работать не пробовал такой изврат =) т.е. имеем нечто такое:
template<typename _Ty>
class List
{
private:
_Ty * first;
_Ty * last;
public:
//методы всякие
};
в общем ка то так =) пробуй =)
З.Ы. а нафиг те вообще такой изврат? опиши ситуацию мож чо лучше придумаем =)
|
(Offline)
|
|
10.04.2007, 01:31
|
#20
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Списки данных
ситуация:
я вполне привык к билтцевским типам, ищщу альтернативу. думаю такая фигня не покатит, при инициализации экземпляра класса list будут проблемы (list<item<bla-bla-bla>> gnom). хз конечно, я серьезно c++ не так давно изучаю.
впрочем уже почти удалось сэмулировать эти самые блитцевские списки (простой перебор, простое создание элемента, доступ к его полям через экземпляр класса, возможнонсть прогона туда-сюда, простое удаление элемента (неработает))
|
(Offline)
|
|
10.04.2007, 01:36
|
#21
|
|
Re: Списки данных
HolyDel
брр
делай связаный список с шаблоном и ложи ето отдельно
а потом юзай обычный класс пули
не вижу смысла шаблоны применять в items
|
|
|
10.04.2007, 01:42
|
#22
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Списки данных
я тоже не вижу
поэтому и не применяю
|
(Offline)
|
|
10.04.2007, 12:06
|
#23
|
Дэвелопер
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений (для 2,920 пользователей)
|
Re: Списки данных
гммм... и все проблемы из-за привычки? =) ну в общем то дело твое, но знание STL обычно является обязательным условием при приеме на работу =) хотя если это только типо хобби то не страшно, хотя... вообще вот это:
list<item<bla-bla-bla>> gnom
работать не станет =) а вот это:
list<item<bla-bla-bla> > gnom;
станет =) а вообще я ведь предлагал не так малость ну да ладно =)
воообще как вариант есть ведь typedef:
typedef item<bla-bla-bla> gnomeitem;
list<gmoneitem> gnome;
и вообще посмотри все таки STL'овские вектора, мапы, списки =) думаю они тебе понравится больше чем блитзевские =)
З.Ы. а чо удаление не работает?
|
(Offline)
|
|
10.04.2007, 16:55
|
#24
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
Re: Списки данных
Сообщение от HolyDel
ситуация:
я вполне привык к билтцевским типам, ищщу альтернативу.
|
Зачем тогда писать на С++, если сам себе ставить ограничения, которые были в блице? Лучше тогда ориентироваться на БМаксовский структуры, так как там ООП.
Да, в STL перебор, удаление, произвольное удаление, поиск - это все уже реализовано и проверено годами. Ты уверен, что сделаешь лучше?)
|
(Offline)
|
|
12.04.2007, 22:46
|
#25
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
Re: Списки данных
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:46.
|