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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В Паскале так, а в С++... if x in [1,2,5] then 
:(
    Опции темы
Любитель
Дата 17.6.2009, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Так.. Я всё равно не понял. Ты говоришь, что размер зависит от количества элементов. Для пустого множества что хранится?


--------------------
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 17.6.2009, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Любитель @  17.6.2009,  11:58 Найти цитируемый пост)
Так.. Я всё равно не понял. Ты говоришь, что размер зависит от количества элементов. Для пустого множества что хранится? 

 ShowMessage(IntToStr(sizeof([0, 1]))); показывает 1 байт
 ShowMessage(IntToStr(sizeof([]))); показывает 32 байта

Добавлено через 11 минут и 33 секунды
  Если переменная множества создается явно, то размер всегда будет кол элементов / 8 ; Если же нет, то размер меняется по обстоятельствам. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
mes
Дата 17.6.2009, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Любитель @  17.6.2009,  11:58 Найти цитируемый пост)
Для пустого множества что хранится? 

для пустого множества или пустого диапазона ?  smile 


Это сообщение отредактировал(а) mes - 17.6.2009, 13:19


--------------------
PM MAIL WWW   Вверх
Любитель
Дата 17.6.2009, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Цитата(Alexeis @  17.6.2009,  13:03 Найти цитируемый пост)
Если переменная множества создается явно, то размер всегда будет кол элементов / 8 

Ну, вот об этом и речь, те вот это никогда не происходит на самом деле:
Цитата(Alexeis @  17.6.2009,  11:31 Найти цитируемый пост)
  Перевыделяется память и создается новое множество большего размера. 


Цитата(Alexeis @  17.6.2009,  13:03 Найти цитируемый пост)
ShowMessage(IntToStr(sizeof([0, 1])));

Как я понимаю здесь просто создаётся константа типа set of 0..1 (надеюсь, синтаксис правильно написал?), соответственно размер один байт (ибо больше не надо). Если же переменную создаём - то размер константен и рассчитывается исходя из диапазона в описании типа (если указан просто тип - то весь диапазон этого типа). Для пустого множества-константы по-видимому берётся какой-то дефолтный тип..

Добавлено через 1 минуту и 23 секунды
Цитата(mes @  17.6.2009,  13:17 Найти цитируемый пост)
для пустого множества или пустого диапазона ? 

Множества. Просто я запусталя из-за слов Alexeis-а о перевыделении памяти. Думал, вдруг там всегда минимизируется используемая память (ИМХО это того не стоит в данном случае, потерь обльше чем выигрыша).


--------------------
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 17.6.2009, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



mes, про диапазоны тут речи нет. В паскале [0,1,2,3,4] или ['a'..'z', 'B', ' '] это множества. Просто это встроенный тип функциональность которого обеспечивается компилятором. Он не работает также как объект. Для него не создается специального объекта. Это некий тип не имеющий прообраза в асме. В С++ можно создать простой стековый объект, который будет делать тоже самое и работать также быстро, хотя получить синтаксис  ['a'..'z', 'B', ' '] вряд ли удаться, но что-то аналогичное [0,1,2,3,4] запросто.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
mes
Дата 17.6.2009, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Любитель @  17.6.2009,  12:23 Найти цитируемый пост)
Множества. 

Пустое множество имеет максимальный диапазон  smile

Цитата(Любитель @  17.6.2009,  12:23 Найти цитируемый пост)
Думал, вдруг там всегда минимизируется используемая память

В рантайме такого не происходит. Кол-во памяти определяется на этапе компиляции.




--------------------
PM MAIL WWW   Вверх
Alexeis
Дата 17.6.2009, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Любитель @  17.6.2009,  12:23 Найти цитируемый пост)
Множества. Просто я запусталя из-за слов Alexeis-а о перевыделении памяти. Думал, вдруг там всегда минимизируется используемая память (ИМХО это того не стоит в данном случае, потерь обльше чем выигрыша). 

  На самом деле как будет ли выделение памяти или нет зависит от компилятора, судя по проведенным экспериментам все таки перераспределение не происходит... 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
mes
Дата 17.6.2009, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Alexeis @  17.6.2009,  12:28 Найти цитируемый пост)
На самом деле как будет ли выделение памяти или нет зависит от компилятора, судя по проведенным экспериментам все таки перераспределение не происходит...  

Сейчас запутаемся кто о чем говорит. 

Для переменной одного и того же типа сета, перераспределения не происходит. 




Это сообщение отредактировал(а) mes - 17.6.2009, 13:36


--------------------
PM MAIL WWW   Вверх
Любитель
Дата 17.6.2009, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Цитата(mes @  17.6.2009,  13:35 Найти цитируемый пост)
Для переменной одного и того же типа сета, перераспределения не происходит. 

Вот я тоже так всегда думал. А в этой теме поназапутали меня, а я затем всех остальных smile 


--------------------
PM MAIL ICQ Skype   Вверх
sdukshis
Дата 19.6.2009, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Может я и неправильно понял автора, но если нужно именно это:
Код

if x in [1,2,5] then

то
Код

if (x==1 || x==2 || x==5 ){
//...
}



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


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



sdukshis, а если нужно будет перенести 
Код

if x in [1,2,5..75] then


Точно также писать ? smile 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
sdukshis
Дата 19.6.2009, 21:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Alexeis @ 19.6.2009,  20:25)
sdukshis, а если нужно будет перенести 
Код

if x in [1,2,5..75] then


Точно также писать ? smile

Код

if (x == 1 || x==2 || (x>=5 && x <=75)){
}

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

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

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

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

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


 




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


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

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