Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Тип множество!


Автор: Vetos 26.5.2010, 00:23
Здравствуйте все!
Нашел пример множества в книге, вот оно)):
Код

typedef union{ 
unsigned char data[16]; 
long __data[4]; 
}TSet,*PSet; 


#define Clear(set)\
    (set).data[0] = 0; (set).data[1]=0; (set).data[2] = 0; (set).data[3] = 0;

#define Include(set, n)\
    (set).data[(n) >> 3] |= (1 << ((n) & 7));

#define In(set, n)\
    ( (set).data[ (n) >> 3 ] & (1 << ((n) & 7)) )



в множество можно затулить числа от 0 до 99, но в принцыпе должно быть до 127.

но после использовании функции Clear, печать множества функцией
Код
void printset( TSet Set )
{
    for(int i=0; i < 100; i++ )
        if( (In( Set, i ))>0 )
            printf(" %i,", i );
}

выводит мне следующие числа  36, 38, 39, 41, 46, 54, 66, 67, 70, 71, 73, 78, 86. А по идее ни должно ничего вывести. Это вообще реально починить, как оно там шо делает я не знаю, может ктонибудь увидит ошибку.Спасибо.

В общем разобрался как почистить множество:
Код
#define Clear(set)\
    (set).data[0] = 0; (set).data[1]=0; (set).data[2] = 0; (set).data[3] = 0;\
    (set).data[4] = 0; (set).data[5]=0; (set).data[6] = 0; (set).data[7] = 0;\
    (set).data[8] = 0; (set).data[9]=0; (set).data[10] = 0; (set).data[11] = 0;\
    (set).data[12] = 0; (set).data[13]=0; (set).data[14] = 0; (set).data[15] = 0;

но вот значения больше 99, не залазят:(

Автор: boostcoder 26.5.2010, 01:08
в чем смысл сего изврата?
std::set<> не подходит?

Автор: Vetos 27.5.2010, 20:54
Я про такое и не знал! И все равно вопрос!
Вот это std::set, как по скорости будет работать. У меня дерево возможных ходов, где генерится около 200000000  возможных комбинаций, и то это с альфа-бета. Мне почемуто кажется что std::set не подходит для этой цели, так как жрет и ресурсы, так и процессорное время, я конечно незнаю как это организовано, но думаю не в пару строк кода.

Автор: boostcoder 27.5.2010, 20:59
Цитата(Vetos @  27.5.2010,  20:54 Найти цитируемый пост)
Вот это std::set, как по скорости будет работать. У меня дерево возможных ходов, где генерится около 200000000  возможных комбинаций, и то это с альфа-бета. Мне почемуто кажется что std::set не подходит для этой цели, так как жрет и ресурсы, так и процессорное время, я конечно незнаю как это организовано, но думаю не в пару строк кода. 

обо всем этом, можно почитать у классиков С++.
могу сказать одно - лучше все равно не напишете.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)