Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сноава списки 
:(
    Опции темы
knut
Дата 9.12.2006, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Народ не как не могу сделать список классов так чтоб в первоя звязь была обычной т.е не зависимо от типа элемента  а вот обратная связь была такой элемент списка должен указывать только на на элемент своего типа.т.е A->B->A->A->B это первоя связь а вторая должна быть(тот же список)
 А->А->А->B->B.
Как рализовать такое? 



--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
bsa
Дата 10.12.2006, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Если честно непонятно, на что может, а на что не может указывать обратная связь.
Код
struct BaseEntry {
     BaseEntry *next, *prev;
     BaseEntry(void) : next(0), prev(0) {}
};
class EntryA : protected BaseEntry {
       ........
};
class EntryB : protected BaseEntry {
       ........
};

PM   Вверх
zabivator
Дата 10.12.2006, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



Код

struct BaseEntry
{
BaseEntry* next;
protected:
BaseEntry( BaseEntry *_next) : next(_next) {}
};
template< class T > struct Entry : public BaseEntry
{
T* prev;
Entry( BaseEntry* _next = 0, T* _prev = 0 ) : BaseEntry(_next), prev(_prev) {}
};

Так по-моему лучше.
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
knut
Дата 10.12.2006, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



bsa, 
zabivator,  
и где у вас там организацыя списка?


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
zabivator
Дата 10.12.2006, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



knut, я тебе подал идею, как контролировать объекты в списке через фундаментальное понятие языка - типы. 
Тебе нужна реализация списка? Так и напиши.
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
knut
Дата 10.12.2006, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



интересно где тут твой велосипед?


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
zabivator
Дата 10.12.2006, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



knut, не понял, поясни. Если это провокация - зря время не теряй, не поведусь.
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
knut
Дата 10.12.2006, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



да нет если что не так извиниsmile просто наверно я не все понял

Добавлено @ 22:02 
я делаю так
Код


                list<A*>lst;
    list<list<A*>::iterator>l_b,l_c;
void  cTeam::AddNod(A *item)
{
    lst.push_back(item);
    for(list<cUnit*>::iterator i = lst.begin();i!= lst.end();i++ )
    {
        if(dynamic_cast<B*>(*i))
        {
            l_b.push_back(i);
        }
        else if(dynamic_cast<C*>(*i))
        {
            l_c.push_back(i);
        }
    }
}
void cTeam::RemoveNode(A *item)
{
    lst.remove(item);
    for(list<cUnit*>::iterator i = lst.begin();i!= lst.end();i++ )
    {
        if(dynamic_cast<B*>(*i))
        {
            l_b.remove(i);        
        }
        else
        {
            if(dynamic_cast<C*>(*i))
            l_c.remove(i);
        }
    }
}




--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
zabivator
Дата 10.12.2006, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



knut, чорт, я не правильно первоначальную задачу понял. Но, имхо, RTTI тут - явно лишнее, пойду-ка я покурю над лучшей реализацией...

Добавлено @ 22:10 
knut, единственное, что могу придумать в нормальной ( по количеству строчек кода) реализации - унаследоваться от std::list, перегрузить у него операторы ++ и --. Делать dynamic_cast внутри них.
Чтобы эффективность была нормальная ( по скорости ), там уж нужно глубже копать - взять за основу ( за контейнер списка ) структуру данных 
мою или от bsa, а там уже лепить свой список, с собственной семантикой связей.
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
knut
Дата 10.12.2006, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



а чем мой вариант плоx?


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
zabivator
Дата 10.12.2006, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



knut, тем, что он объявляет внешние функции для добавления и удаления элемента. Т.е. это не совсем список... А некоторые лесА, нагороженные вокруг стандартного списка.
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
knut
Дата 11.12.2006, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



Цитата

Т.е. это не совсем список... А некоторые лесА, нагороженные вокруг стандартного списка.

как не совсем список а тогда что это?


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
zabivator
Дата 11.12.2006, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



knut, это не контйнер в плюсовом его смысле =) Больше похоже на структурно-функциональное программирование.
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
knut
Дата 11.12.2006, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 7.2.2006

Репутация: нет
Всего: нет



у меня еще вопрос.как создать лист листов.т.есть списки list<base*>list_a,list<base*>list_b, list<base*>list_c  ,надо создать лист list<base*>list_common из етиx листов.это вообще реално?


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
JackYF
Дата 11.12.2006, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



std::list< std::list< base* > > устроит?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0607 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.