Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

30.01.2014, 23:46. Просмотров 1273. Ответов 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 ? (C++):

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

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

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

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

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

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

35
_lunar_
1386 / 1317 / 108
Регистрация: 03.05.2011
Сообщений: 3,043
Завершенные тесты: 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 / 4
Регистрация: 26.12.2011
Сообщений: 217
31.01.2014, 00:49 #4
Welder_WD, а чем, собственно, не угодил if?
Как предложили выше - switch, либо тренарную операцию, если всё в одну строку укладывать.
0
mrKi
2 / 2 / 0
Регистрация: 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
5437 / 4832 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
31.01.2014, 01:00 #6
Прежде, чем что-то предлагать, нужно получить, от ТС, ответ на главный вопрос:
Цитата Сообщение от zelim Посмотреть сообщение
а чем, собственно, не угодил if?
0
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
31.01.2014, 01:06 #7
alsav22, скилл телепата качаю. И судя по всему, не я один
1
Avazart
31.01.2014, 01:32
  #8

Не по теме:

Не по теме:

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

0
Welder_WD
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 16
31.01.2014, 09:16  [ТС] #9
Всем спасибо за ответы. Теперь внесу некую ясность
Меня if(codition){} устраивает чуть более, чем полностью, но люди, стоящие выше меня, сказали, что я должен сделать без него. Вариант со switch-case тоже там не котируется. потому я сижу и ломаю голову над этой задачей, да и вам тоже подкинул данную затею
0
aLarman
644 / 565 / 89
Регистрация: 13.12.2012
Сообщений: 2,111
Завершенные тесты: 1
31.01.2014, 09:19 #10
пишите функтор или 11ый стандарт и лямбда ф-цию и for_each проход по коллекции...или др алгоритм, в зависимости от задачи
0
alsav22
5437 / 4832 / 442
Регистрация: 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 / 89
Регистрация: 13.12.2012
Сообщений: 2,111
Завершенные тесты: 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
5437 / 4832 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
31.01.2014, 10:06 #13
Цитата Сообщение от aLarman Посмотреть сообщение
выдем же если (*it) ->getInfo() == info будет false
Точно. А я голову ломаю: что не работает? Спать пора.
0
Tulosba
:)
Эксперт С++
4705 / 3240 / 297
Регистрация: 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     Обойтись без If ?
  #15

Не по теме:

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

0
31.01.2014, 10:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2014, 10:19
Привет! Вот еще темы с ответами:

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

Когда стоит использовать класс, а когда лучше обойтись без них? - C++
Когда стоит использовать класс, а когда лучше обойтись без них? Когда следует использовать несколько классов? Вот, например. Программа...

Как обойтись без указателей и указателей на указатель? - C++
Ибо не совсем выходит понять,что на что тут указывает #include "stdafx.h" #include <iostream> #include <stdlib.h> using namespace...

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


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

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

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