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

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

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

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

30.01.2014, 23:46. Просмотров 1115. Ответов 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 ?
Посмотрите здесь:

можно ли обойтись без IF ? - C++
Нужно заполнить с главного массива(mas_g) один массив(mas1) елементы с чётными номерами, а в другой(mas2) с нечётными. Вот то, что я...

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

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

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

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

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

Использовать классы, или обойтись линейными действиями? - C++
Создайте имитацию входа в систему, которая будет запрашивать пароль и выдавать приглашение только в случае совпадения введенного пароля с...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_lunar_
1230 / 1156 / 80
Регистрация: 03.05.2011
Сообщений: 2,788
Записей в блоге: 3
Завершенные тесты: 1
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
5416 / 4812 / 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
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 16
31.01.2014, 09:16  [ТС]     Обойтись без If ? #9
Всем спасибо за ответы. Теперь внесу некую ясность
Меня if(codition){} устраивает чуть более, чем полностью, но люди, стоящие выше меня, сказали, что я должен сделать без него. Вариант со switch-case тоже там не котируется. потому я сижу и ломаю голову над этой задачей, да и вам тоже подкинул данную затею
aLarman
641 / 562 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
31.01.2014, 09:19     Обойтись без If ? #10
пишите функтор или 11ый стандарт и лямбда ф-цию и for_each проход по коллекции...или др алгоритм, в зависимости от задачи
alsav22
5416 / 4812 / 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
641 / 562 / 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
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
31.01.2014, 10:06     Обойтись без If ? #13
Цитата Сообщение от aLarman Посмотреть сообщение
выдем же если (*it) ->getInfo() == info будет false
Точно. А я голову ломаю: что не работает? Спать пора.
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
641 / 562 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
31.01.2014, 10:38     Обойтись без If ? #17
Tulosba,

Не по теме:

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

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 ?
Еще ссылки по теме:

Использование команды system(); Без всяких окон (без dos и т.д) - C++
Вообще реально сделать чтобы обратиться к системе в фоновом режиме. Без отрытия dos. Без всякой командной строки. Просто чтоб запускал...

Можете переписать код без указаетелей и без printf\scanf? - C++
#include <stdio.h> #include <time.h> #include <stdlib.h> #include <conio.h> int main() { srand((unsigned)time(NULL)); ...

Оператор for, без if (Напишите программу, суммирующую числа в указанном пользователем диапазоне, но без оператора if, который устанавливает границы) - C++
Напишите программу, суммирующую числа в указанном пользователем диапазоне, но без оператора if, который устанавливает верхнюю и нижнюю...

Найти сумму элементов первого столбца без одного последнего элемента, сумму элементов второго столбца без двух последних... - C++
Здравствуйте, форумчане! У меня вот такая вот задачка: Задан двумерный массив. Найти сумму элементов первого столбца без одного...

Как обойтись без x - Pascal
Есть алгоритм (см. прикрепления) Нужно обойтись без x Речь идет о замене элементов находящихся на четных и нечетных местах. (поменять...


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

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

Не по теме:

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



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

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