Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Welder_WD
 Аватар для Welder_WD
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 16
#1

Обойтись без If ? - C++

30.01.2014, 23:46. Просмотров 1077. Ответов 35
Метки нет (Все метки)

Доброго времени суток, уважаемые форумчане.
Помогите, пожалуйста, разобраться со сложившейся ситуацией. Есть код:
C++ (Qt)
1
2
3
4
5
for(it = objectsList.begin();it != objectsList.end(); it++) {
    if((*it)->getInfo() == info){
        *it->receiveNotification(message);
    }
}
как можно изменить всю конструкцию, чтоб в ней не было проверки через if() ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2014, 23:46     Обойтись без If ?
Посмотрите здесь:

C++ Использование команды system(); Без всяких окон (без dos и т.д)
C++ Найти сумму элементов первого столбца без одного последнего элемента, сумму элементов второго столбца без двух последних...
Как обойтись без виртуальных конструкторов? C++
C++ Как на блок-схеме обойтись без вводимых данных?
C++ можно ли обойтись без IF ?
Оператор for, без if (Напишите программу, суммирующую числа в указанном пользователем диапазоне, но без оператора if, который устанавливает границы) C++
Использовать классы, или обойтись линейными действиями? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Welder_WD
 Аватар для Welder_WD
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 16
31.01.2014, 11:18  [ТС]     Обойтись без If ? #21
Цитата Сообщение от Tulosba Посмотреть сообщение
Если проверка необходима, и нужно убрать данный if, то он мог бы быть перемещен:
а) до заполнения списка (но по условию не может, т.к. добавляются в любой момент и без проверки)
б) в функцию receiveNotification(message)
в) третьего не дано.
Я зашел в тупик . Функцию переделать нельзя, так как используется общий интерфейс.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
31.01.2014, 11:30     Обойтись без If ? #22
Цитата Сообщение от Welder_WD Посмотреть сообщение
Я зашел в тупик
Если нужно чтобы в цикле вообще не было условных конструкций, то варианты я уже предложил.
Иначе никак.
Цитата Сообщение от Welder_WD Посмотреть сообщение
так как используется общий интерфейс.
А интерфейс менять и не надо, надо менять тело функции.
edwvee
19 / 19 / 2
Регистрация: 27.01.2014
Сообщений: 232
31.01.2014, 12:04     Обойтись без If ? #23
Не представляю как это можно сделать без проверки. Как извращение можно собственный класс итераторов, который будет проверять сам при смене значения или при его получении, тогда из цикла вообще все исключить можно, кроме самого цикла)
aLarman
31.01.2014, 12:05
  #24

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
А интерфейс менять и не надо, надо менять тело функции.
да лан что там, меняй, напишешь потом адаптер и все хД

Welder_WD
 Аватар для Welder_WD
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 16
31.01.2014, 12:39  [ТС]     Обойтись без If ? #25
Я уже надумал такое. Использовать STLевский map, а по значению info пытаться воткнуть не 1 объект, а массив объектов. Теперь думаю, реализуемо такое или нет
edwvee
19 / 19 / 2
Регистрация: 27.01.2014
Сообщений: 232
31.01.2014, 12:45     Обойтись без If ? #26
Цитата Сообщение от Welder_WD Посмотреть сообщение
Я уже надумал такое. Использовать STLевский map, а по значению info пытаться воткнуть не 1 объект, а массив объектов. Теперь думаю, реализуемо такое или нет
Тогда нужен multimap, точно не помню название.
aLarman
640 / 561 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
31.01.2014, 12:49     Обойтись без If ? #27
Цитата Сообщение от edwvee Посмотреть сообщение
Тогда нужен multimap, точно не помню название.
Welder_WD-у вроде как раз надо неск значений по единому ключу, мультимап вряд ли, там find возвращает только 1 элемент с таким ключем

Добавлено через 59 секунд
Цитата Сообщение от Welder_WD Посмотреть сообщение
Теперь думаю, реализуемо такое или нет
C++
1
2
3
map<string,vector<Obj> >
 
map<string,list<Obj> >
Welder_WD
 Аватар для Welder_WD
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 16
31.01.2014, 12:52  [ТС]     Обойтись без If ? #28
Спасибо
Сейчас опробую и отпишусь - вышло это реализовать или нет.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
31.01.2014, 13:24     Обойтись без If ? #29
C++
while(a == true)
{
  goto yes;
}
goto no;
 
yes:
....
goto exit;
 
no:
....
exit:
....
Welder_WD
 Аватар для Welder_WD
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 16
31.01.2014, 13:30  [ТС]     Обойтись без If ? #30
Сделал я это дело через мап и сет.
Даже работает правильно, но конструкции типа
C++
1
(notifiables[observersTag]).erase(observer);
смотрятся как-то по-индусски .
aLarman
640 / 561 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
31.01.2014, 13:32     Обойтись без If ? #31
Цитата Сообщение от Welder_WD Посмотреть сообщение
notifiables[observersTag]
аккуратнее с оператором [] в map
edwvee
19 / 19 / 2
Регистрация: 27.01.2014
Сообщений: 232
31.01.2014, 13:39     Обойтись без If ? #32
Цитата Сообщение от aLarman Посмотреть сообщение
аккуратнее с оператором [] в map
Почему?
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
31.01.2014, 13:43     Обойтись без If ? #33
Цитата Сообщение от edwvee Посмотреть сообщение
Почему?
потому что если элемента с указанным ключем нет, он будет вставлен.
Avazart
 Аватар для Avazart
7037 / 5214 / 259
Регистрация: 10.12.2010
Сообщений: 22,904
Записей в блоге: 17
31.01.2014, 14:36     Обойтись без If ? #34
Цитата Сообщение от edwvee Посмотреть сообщение
Почему?
Через find http://www.cplusplus.com/reference/m...=map%3A%3Afind
Welder_WD
 Аватар для Welder_WD
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 16
31.01.2014, 14:42  [ТС]     Обойтись без If ? #35
Цитата Сообщение от aLarman Посмотреть сообщение
аккуратнее с оператором [] в map
Цитата Сообщение от Tulosba Посмотреть сообщение
потому что если элемента с указанным ключем нет, он будет вставлен.
Однако. Чего не знал, того не знал. Спасибо вам
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2014, 17:23     Обойтись без If ?
Еще ссылки по теме:

C++ Вывод числа в столбик с первой цифры, без массива, без строк
Функция abs и как обойтись без нее C++
C++ Можно ли обойтись без mutex?
C++ Можете переписать код без указаетелей и без printf\scanf?
C++ Зачем нужен iterator, если можно обойтись без него?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
gray_fox
What a waste!
 Аватар для gray_fox
1251 / 1134 / 54
Регистрация: 21.04.2012
Сообщений: 2,357
Завершенные тесты: 3
31.01.2014, 17:23     Обойтись без If ? #36
Можно boost::range попробовать, примерно
C++
1
2
3
for (auto & object : objectsList | boost::adaptors::filtered(boost::bind(&object_type::getInfo) == info)) {
   object.recieveNotification(message);
}
Добавлено через 27 минут
boost::bind(...) -> boost::bind(&object_type::info, _1)
Yandex
Объявления
31.01.2014, 17:23     Обойтись без If ?
Ответ Создать тему
Опции темы

Текущее время: 11:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru