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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Welder_WD
 Аватар для Welder_WD
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 16
30.01.2014, 23:46     Обойтись без If ? #1
Доброго времени суток, уважаемые форумчане.
Помогите, пожалуйста, разобраться со сложившейся ситуацией. Есть код:
C++ (Qt)
1
2
3
4
5
for(it = objectsList.begin();it != objectsList.end(); it++) {
    if((*it)->getInfo() == info){
        *it->receiveNotification(message);
    }
}
как можно изменить всю конструкцию, чтоб в ней не было проверки через if() ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_lunar_
Graphics API Developer
1197 / 1123 / 76
Регистрация: 03.05.2011
Сообщений: 2,741
31.01.2014, 00:39     Обойтись без If ? #2
парой if заменяют конструкцией switch - case
C++
1
2
3
4
5
6
7
8
switch(*it)
{
    case "info": *it->receiveNotification(message);
    break;
 
    default:
    break;
}
Alkenso
5 / 4 / 4
Регистрация: 30.01.2014
Сообщений: 27
31.01.2014, 00:48     Обойтись без If ? #3
или же попробовать через тернарный (условный) оператор
(*it)->getInfo() == info ? *it->receiveNotification(message) : 0;
где-то так
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
31.01.2014, 00:49     Обойтись без If ? #4
Welder_WD, а чем, собственно, не угодил if?
Как предложили выше - switch, либо тренарную операцию, если всё в одну строку укладывать.
mrKi
2 / 2 / 0
Регистрация: 01.08.2013
Сообщений: 60
31.01.2014, 00:57     Обойтись без If ? #5
можно вложенный цикл, с условием входа в него - (*it)->getInfo() == info, но условный оператор лучше.
также, если нет необходимости выводить все сообщения, а можно лишь первое - поставить (*it)->getInfo()!= info в условие выполнения цикла.

Добавлено через 2 минуты
еще можно цикл while с условием выхода - (*it)->getInfo() == info после чего уже выводить сообщение, опять же если нужно вывести лишь первое

Добавлено через 1 минуту
+ никто не отменял goto(да простят меня кодеры). Лучше не юзать, но как вариант можно присабачить и сюда. Но проверка нужна будет, если не через if, то через вхождение в цикл.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
31.01.2014, 01:00     Обойтись без If ? #6
Прежде, чем что-то предлагать, нужно получить, от ТС, ответ на главный вопрос:
Цитата Сообщение от zelim Посмотреть сообщение
а чем, собственно, не угодил if?
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
31.01.2014, 01:06     Обойтись без If ? #7
alsav22, скилл телепата качаю. И судя по всему, не я один
Avazart
31.01.2014, 01:32
  #8

Не по теме:

Не по теме:

Цитата Сообщение от zelim Посмотреть сообщение
alsav22, скилл телепата качаю.
главное что бы без допинга )

Welder_WD
 Аватар для Welder_WD
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 16
31.01.2014, 09:16  [ТС]     Обойтись без If ? #9
Всем спасибо за ответы. Теперь внесу некую ясность
Меня if(codition){} устраивает чуть более, чем полностью, но люди, стоящие выше меня, сказали, что я должен сделать без него. Вариант со switch-case тоже там не котируется. потому я сижу и ломаю голову над этой задачей, да и вам тоже подкинул данную затею
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
31.01.2014, 09:19     Обойтись без If ? #10
пишите функтор или 11ый стандарт и лямбда ф-цию и for_each проход по коллекции...или др алгоритм, в зависимости от задачи
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
31.01.2014, 09:30     Обойтись без If ? #11
C++
1
2
for(it = objectsList.begin(); it != objectsList.end() && (*it) ->getInfo() == info; it++) 
    (*it) ->receiveNotification(message);
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
31.01.2014, 09:49     Обойтись без If ? #12
Цитата Сообщение от alsav22 Посмотреть сообщение
for(it = objectsList.begin(); it != objectsList.end() && (*it) ->getInfo() == info; it++)
выдем же если (*it) ->getInfo() == info будет false
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
31.01.2014, 10:06     Обойтись без If ? #13
Цитата Сообщение от aLarman Посмотреть сообщение
выдем же если (*it) ->getInfo() == info будет false
Точно. А я голову ломаю: что не работает? Спать пора.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
31.01.2014, 10:06     Обойтись без If ? #14
Цитата Сообщение от _lunar_ Посмотреть сообщение
парой if заменяют конструкцией switch - case
в плюсах switch работает только по интегральным типам.
Для ТС: раскройте суть, что есть info и что лежит в списке. Может быть от вас просто хотят того, чтобы в списке, по которому идет проход не было элементов для которых
C++
1
(*it)->getInfo() != info
aLarman
31.01.2014, 10:19
  #15

Не по теме:

Цитата Сообщение от alsav22 Посмотреть сообщение
Спать пора.
утро ж

Tulosba
31.01.2014, 10:33
  #16

Не по теме:

Цитата Сообщение от aLarman Посмотреть сообщение
утро ж
Земля круглая. А Россия большая.

aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
31.01.2014, 10:38     Обойтись без If ? #17
Tulosba,

Не по теме:

да как ни крути сейчас или день или утро, но не более того

Welder_WD
 Аватар для Welder_WD
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 16
31.01.2014, 10:43  [ТС]     Обойтись без If ? #18
Цитата Сообщение от Tulosba Посмотреть сообщение
в плюсах switch работает только по интегральным типам.
Для ТС: раскройте суть, что есть info и что лежит в списке. Может быть от вас просто хотят того, чтобы в списке, по которому идет проход не было элементов для которых
C++
1
(*it)->getInfo() != info
В списке лежат объекты с определенными метками, которые можно получить через метод getInfo(). Ввиду того, что объекты в список добавляются в любой момент времени, а ихние метки могут идти не по порядку (к примеру: obj1(3), obj2(7), obj3(42), obj4(2), obj5(42), obj6(42)), но нужно отправить информацию тем объектам коллекции, которые содержат определенную метку (возьмём 42), проверка просто необходима. Но как реализовать это без if - я вообще не знаю.
alsav22
31.01.2014, 10:45
  #19

Не по теме:

Цитата Сообщение от aLarman Посмотреть сообщение
утро ж
Так ночь не спал.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2014, 10:55     Обойтись без If ?
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
31.01.2014, 10:55     Обойтись без If ? #20

Не по теме:

Цитата Сообщение от aLarman Посмотреть сообщение
да как ни крути сейчас или день или утро,
В Магадане дело близится к 7 вечера. Это уж точно не день. Хотя спать тоже рановато



Цитата Сообщение от Welder_WD Посмотреть сообщение
проверка просто необходима.
Если проверка необходима, и нужно убрать данный if, то он мог бы быть перемещен:
а) до заполнения списка (но по условию не может, т.к. добавляются в любой момент и без проверки)
б) в функцию receiveNotification(message)
в) третьего не дано.
Yandex
Объявления
31.01.2014, 10:55     Обойтись без If ?
Ответ Создать тему
Опции темы

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