Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
Welder_WD
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 16
#1

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

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

Доброго времени суток, уважаемые форумчане.
Помогите, пожалуйста, разобраться со сложившейся ситуацией. Есть код:
C++ (Qt)
1
2
3
4
5
for(it = objectsList.begin();it != objectsList.end(); it++) {
    if((*it)->getInfo() == info){
        *it->receiveNotification(message);
    }
}
как можно изменить всю конструкцию, чтоб в ней не было проверки через if() ?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2014, 23:46
Ответы с готовыми решениями:

можно ли обойтись без IF ?
Нужно заполнить с главного массива(mas_g) один массив(mas1) елементы с чётными...

Можно ли обойтись без mutex?
в оф мануале : говориться что данные будут появляться то так то эдак...

Как обойтись без виртуальных конструкторов?
Я перехожу с Delphi. Многое там строится на виртуальных конструкторах, как без...

Функция abs и как обойтись без нее
Нужна помощь. При написании кода столкнулся с некой проблемой, что при...

Можно ли обойтись без разыменования адресов на элементы
Вот куски кода (полный код тут): // Double Bitset 85 bitset<ULONG_MAX>...

35
_lunar_
1407 / 1345 / 183
Регистрация: 03.05.2011
Сообщений: 3,104
Завершенные тесты: 1
31.01.2014, 00:39 #2
парой if заменяют конструкцией switch - case
C++
1
2
3
4
5
6
7
8
switch(*it)
{
    case "info": *it->receiveNotification(message);
    break;
 
    default:
    break;
}
0
Alkenso
5 / 4 / 4
Регистрация: 30.01.2014
Сообщений: 27
31.01.2014, 00:48 #3
или же попробовать через тернарный (условный) оператор
(*it)->getInfo() == info ? *it->receiveNotification(message) : 0;
где-то так
0
zelim
77 / 77 / 9
Регистрация: 26.12.2011
Сообщений: 217
31.01.2014, 00:49 #4
Welder_WD, а чем, собственно, не угодил if?
Как предложили выше - switch, либо тренарную операцию, если всё в одну строку укладывать.
0
mrKi
2 / 2 / 2
Регистрация: 01.08.2013
Сообщений: 60
31.01.2014, 00:57 #5
можно вложенный цикл, с условием входа в него - (*it)->getInfo() == info, но условный оператор лучше.
также, если нет необходимости выводить все сообщения, а можно лишь первое - поставить (*it)->getInfo()!= info в условие выполнения цикла.

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

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

Не по теме:

Не по теме:

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

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

Не по теме:

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

0
Tulosba
31.01.2014, 10:33
  #16

Не по теме:

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

0
aLarman
644 / 565 / 164
Регистрация: 13.12.2012
Сообщений: 2,112
Завершенные тесты: 1
31.01.2014, 10:38 #17
Tulosba,

Не по теме:

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

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

Не по теме:

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

0
Tulosba
:)
Эксперт С++
4747 / 3241 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
31.01.2014, 10:55 #20

Не по теме:

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



Цитата Сообщение от Welder_WD Посмотреть сообщение
проверка просто необходима.
Если проверка необходима, и нужно убрать данный if, то он мог бы быть перемещен:
а) до заполнения списка (но по условию не может, т.к. добавляются в любой момент и без проверки)
б) в функцию receiveNotification(message)
в) третьего не дано.
0
31.01.2014, 10:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2014, 10:55

Как на блок-схеме обойтись без вводимых данных?
У меня есть, данная программа, как для неё нарисовать блок-схему? Ведь нет...

Зачем нужен iterator, если можно обойтись без него?
Почему нужен итератор(iterator) если этот код #include <iostream>...

Когда стоит использовать класс, а когда лучше обойтись без них?
Когда стоит использовать класс, а когда лучше обойтись без них? Когда следует...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru