Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 09.04.2007, 21:49   #16
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Списки данных

спасибо Knightmare
не, item ненадо шаблонить. это базовый класс от него будем плясать при создании элементов для списков.
а вот list надо зашоблонить чтобы можно было юзать новоиспеченные классы - потомки item'a.
(Offline)
 
Ответить с цитированием
Старый 09.04.2007, 23:59   #17
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: Списки данных

При твоей структуре item шаблонить надо. Непонятно только, какие от него могут быть потомки.
(Offline)
 
Ответить с цитированием
Старый 10.04.2007, 01:18   #18
HolyDel
 
Регистрация: 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
Knightmare
Дэвелопер
 
Регистрация: 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
HolyDel
 
Регистрация: 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
jimon
 
Сообщений: n/a
Re: Списки данных

HolyDel
брр
делай связаный список с шаблоном и ложи ето отдельно

а потом юзай обычный класс пули
не вижу смысла шаблоны применять в items
 
Ответить с цитированием
Старый 10.04.2007, 01:42   #22
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Списки данных

я тоже не вижу
поэтому и не применяю
(Offline)
 
Ответить с цитированием
Старый 10.04.2007, 12:06   #23
Knightmare
Дэвелопер
 
Регистрация: 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
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: Списки данных

Сообщение от HolyDel
ситуация:
я вполне привык к билтцевским типам, ищщу альтернативу.
Зачем тогда писать на С++, если сам себе ставить ограничения, которые были в блице? Лучше тогда ориентироваться на БМаксовский структуры, так как там ООП.
Да, в STL перебор, удаление, произвольное удаление, поиск - это все уже реализовано и проверено годами. Ты уверен, что сделаешь лучше?)
(Offline)
 
Ответить с цитированием
Старый 12.04.2007, 22:46   #25
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: Списки данных

Может пригодиться:
http://www.gamedev.ru/articles/?id=70103
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CSD передача данных на комьютер Mirik1 MidletPascal 8 07.11.2009 14:35
Всплывающие списки в IDE. ICoder BlitzMax 4 27.10.2008 18:39
Контейнер данных impersonalis FAQ 4 12.02.2008 18:29
Вынос данных. johnk Blitz3D 6 04.03.2007 17:27
типы и хранение данных Akima 2D-программирование 16 10.02.2006 00:45


Часовой пояс GMT +4, время: 16:04.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com