Оператор in
От: dar veter Россия  
Дата: 14.10.03 12:03
Оценка:
Прошу сильно меня не пинать, но ответе пожалуйста на такой вопрос....
В Delphi есть такой оператор in и выполняет он операцию For an ordinal O and a set S, O in S is True just in case O is a member of S.
В С++ есть что нибудь подобное ??? А то я найти не могу
Re: Оператор in
От: sercher Украина  
Дата: 14.10.03 12:05
Оценка:
Здравствуйте, dar veter, Вы писали:

DV>Прошу сильно меня не пинать, но ответе пожалуйста на такой вопрос....

DV>В Delphi есть такой оператор in и выполняет он операцию For an ordinal O and a set S, O in S is True just in case O is a member of S.
DV>В С++ есть что нибудь подобное ??? А то я найти не могу

неа, нету
Re[2]: Оператор in
От: dar veter Россия  
Дата: 14.10.03 12:08
Оценка:
Здравствуйте, sercher, Вы писали:

S>Здравствуйте, dar veter, Вы писали:


DV>>Прошу сильно меня не пинать, но ответе пожалуйста на такой вопрос....

DV>>В Delphi есть такой оператор in и выполняет он операцию For an ordinal O and a set S, O in S is True just in case O is a member of S.
DV>>В С++ есть что нибудь подобное ??? А то я найти не могу

S> неа, нету

Тогда как быть .... писать на ассме ? ... Почему-то использование switch генерит нерациональный код ?
Re: Оператор in
От: achp  
Дата: 14.10.03 12:08
Оценка:
Здравствуйте, dar veter, Вы писали:

DV>В Delphi есть такой оператор in и выполняет он операцию For an ordinal O and a set S, O in S is True just in case O is a member of S.

DV>В С++ есть что нибудь подобное ???

Ближайший аналог — std::bitset<N>::operator[].
Re[2]: Оператор in
От: voxel3d  
Дата: 14.10.03 12:09
Оценка:
Здравствуйте, sercher, Вы писали:

S>Здравствуйте, dar veter, Вы писали:


DV>>Прошу сильно меня не пинать, но ответе пожалуйста на такой вопрос....

DV>>В Delphi есть такой оператор in и выполняет он операцию For an ordinal O and a set S, O in S is True just in case O is a member of S.
DV>>В С++ есть что нибудь подобное ??? А то я найти не могу

S> неа, нету


Оправданных случаев применения оператора is крайне мало. Обычно надо вместо него использовать оператор as. В C++ аналог -- dynamic_cast<>(), если конечно, поддержка RTTI доступна.

best regards..
in hack we trust.
Re[3]: Оператор in
От: voxel3d  
Дата: 14.10.03 12:11
Оценка:
sorry, приглючило прочитал вместо in -- is
Re[3]: Оператор in
От: dar veter Россия  
Дата: 14.10.03 12:14
Оценка:
Здравствуйте, voxel3d, Вы писали:

S>> неа, нету


V>Оправданных случаев применения оператора is крайне мало. Обычно надо вместо него использовать оператор as. В C++ аналог -- dynamic_cast<>(), если конечно, поддержка RTTI доступна.

Вообщем я не про приведения к заданому типу спрашивал ... а про членство
Re: Оператор in
От: Аноним  
Дата: 14.10.03 12:30
Оценка:
Здравствуйте, dar veter, Вы писали:

DV>Прошу сильно меня не пинать, но ответе пожалуйста на такой вопрос....

DV>В Delphi есть такой оператор in и выполняет он операцию For an ordinal O and a set S, O in S is True just in case O is a member of S.
DV>В С++ есть что нибудь подобное ??? А то я найти не могу
    std::binary_search(S.begin(), S.end(), O)
Re[2]: Оператор in
От: Аноним  
Дата: 14.10.03 12:51
Оценка:
Здравствуйте, Аноним, Вы писали:

DV>>Прошу сильно меня не пинать, но ответе пожалуйста на такой вопрос....

DV>>В Delphi есть такой оператор in и выполняет он операцию For an ordinal O and a set S, O in S is True just in case O is a member of S.
DV>>В С++ есть что нибудь подобное ??? А то я найти не могу
А>    std::binary_search(S.begin(), S.end(), O)

Oops... Лучше все же так:
    S.find(O) != S.end()
Re[3]: Оператор in
От: dar veter Россия  
Дата: 14.10.03 13:22
Оценка:
Здравствуйте, Аноним, Вы писали:

А>
А>>    std::binary_search(S.begin(), S.end(), O)
А>

А>Oops... Лучше все же так:
А>
А>    S.find(O) != S.end()
А>

Спасибо... будем пробывать, но мне кажется что простой switch для 8 элементов будет быстрее выполнятся.
Re[4]: Оператор in
От: Анатолий Широков СССР  
Дата: 14.10.03 13:55
Оценка:
Здравствуйте, dar veter, Вы писали:

DV>Здравствуйте, Аноним, Вы писали:


А>>
А>>>    std::binary_search(S.begin(), S.end(), O)
А>>

А>>Oops... Лучше все же так:
А>>
А>>    S.find(O) != S.end()
А>>

DV> Спасибо... будем пробывать, но мне кажется что простой switch для 8 элементов будет быстрее выполнятся.

Если для восьми элементов, то битовая арифметика, однозначно, будет быстрее, чем switch:

unsigned int bitset = 1;
unsigned int element = 0;

bool exist = (1 << element) & bitset);
Re: Оператор in
От: LaptevVV Россия  
Дата: 14.10.03 13:58
Оценка:
Здравствуйте, dar veter, Вы писали:

DV>Прошу сильно меня не пинать, но ответе пожалуйста на такой вопрос....

DV>В Delphi есть такой оператор in и выполняет он операцию For an ordinal O and a set S, O in S is True just in case O is a member of S.
DV>В С++ есть что нибудь подобное ??? А то я найти не могу

Смотри в сторону STL.
Во-первых, там еасть set, а во-вторых — масса алгоритмов поиска, которые и дают тебе ответ in или не in
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[5]: Оператор in
От: dar veter Россия  
Дата: 14.10.03 14:02
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

АШ>unsigned int bitset = 1;

АШ>unsigned int element = 0;

АШ>bool exist = (1 << element) & bitset);


Брр .... сорри не понял, как это применить... например:
Необходимо определить, является WORD w членом вот этого массива
{0x7E7E, 0x3F3F, 0x9F9F, 0xCFCF, 0xE7E7, 0xF3F3, 0xF9F9, 0xFCFC} ?
Re[2]: Оператор in
От: Анатолий Широков СССР  
Дата: 14.10.03 14:03
Оценка:
LVV>Смотри в сторону STL.
LVV>Во-первых, там еасть set, а во-вторых — масса алгоритмов поиска, которые и дают тебе ответ in или не in

Только не одновременно. Либо set + set::find, либо vector + sort + binary_search.
Re[4]: Оператор in
От: Аноним  
Дата: 14.10.03 14:10
Оценка:
Здравствуйте, dar veter, Вы писали:

А>>    S.find(O) != S.end()

DV> Спасибо... будем пробывать, но мне кажется что простой switch для 8 элементов будет быстрее выполнятся.

Ежели элементы — константы целого типа, конечно, быстрее. Зачем здесь такая тяжелая артиллерия, как множества и двоичный поиск?
Re[6]: Оператор in
От: Анатолий Широков СССР  
Дата: 14.10.03 14:11
Оценка:
DV> Брр .... сорри не понял, как это применить... например:
DV> Необходимо определить, является WORD w членом вот этого массива
DV> {0x7E7E, 0x3F3F, 0x9F9F, 0xCFCF, 0xE7E7, 0xF3F3, 0xF9F9, 0xFCFC} ?

Если такой массив элементов, то, конечно, мой совет пустое. Но вот если элементов всего восемь и они пронумерованы от 0 до 7, то бинарная арифметика, конечно, предпочтительней.

А в этом кокретном случае я бы, конечно, использовал следующий подход:


WORD array[] = {0x3F3F, 0x7E7E, 0x9F9F, 0xCFCF, 0xE7E7, 0xF3F3, 0xF9F9, 0xFCFC};

typedef WORD* iterator;

iterator b = array;
iterator e = array + sizeof(array)/sizeof(array[0]);

bool exist = std::binary_search(b, e, w);
Re[6]: Оператор in
От: Аноним  
Дата: 14.10.03 14:12
Оценка:
Здравствуйте, dar veter, Вы писали:

DV> Брр .... сорри не понял, как это применить... например:

DV> Необходимо определить, является WORD w членом вот этого массива
DV> {0x7E7E, 0x3F3F, 0x9F9F, 0xCFCF, 0xE7E7, 0xF3F3, 0xF9F9, 0xFCFC} ?

Набор значений именно таков?
Re[3]: Оператор in
От: Аноним  
Дата: 14.10.03 14:22
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

LVV>>Смотри в сторону STL.

LVV>>Во-первых, там еасть set, а во-вторых — масса алгоритмов поиска, которые и дают тебе ответ in или не in

АШ>Только не одновременно. Либо set + set::find, либо vector + sort + binary_search.


А почему не одновременно? Вот мне совсем не очевидно, что лучше с set: его find или binary_search...
Re[7]: Оператор in
От: dar veter Россия  
Дата: 14.10.03 14:22
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, dar veter, Вы писали:


DV>> Брр .... сорри не понял, как это применить... например:

DV>> Необходимо определить, является WORD w членом вот этого массива
DV>> {0x7E7E, 0x3F3F, 0x9F9F, 0xCFCF, 0xE7E7, 0xF3F3, 0xF9F9, 0xFCFC} ?

А>Набор значений именно таков?

Да ... именно таков ... это комбинации сигнальной единицы одного прибора, для которого пишется это программа... точнее переписывается с Delphi

P.S. сообственно я програмист на С++ не сильный, не давно только перешел. До этого на Delphi просидел более 8 лет.
Re[4]: Оператор in
От: Анатолий Широков СССР  
Дата: 14.10.03 14:24
Оценка:
АШ>>Только не одновременно. Либо set + set::find, либо vector + sort + binary_search.

А>А почему не одновременно? Вот мне совсем не очевидно, что лучше с set: его find или binary_search...


Почему не очевидно, set::iterator не является итератором произвольного доступа. Этого достаточно?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.