Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
Антикодер
Эксперт функциональных языков программирования
1888 / 870 / 48
Регистрация: 15.09.2012
Сообщений: 3,088

BOOST_FOREACH на STL

10.12.2012, 13:19. Показов 2544. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
подскажите как переписать такую конструкцию на STL

C++
1
2
3
4
5
6
7
8
std::map<IObserver* const, IObserver* const> _observers;
typedef std::map<IObserver* const, IObserver* const>::value_type item;
...
BOOST_FOREACH(item iter, _observers)
{
     iter.second->handleEvent(*this);
}
....
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.12.2012, 13:19
Ответы с готовыми решениями:

Второй вложенный цикл (BOOST_FOREACH) работает неожиданно
Проблема: второй вложенный цикл работает неожиданно для меня - после строки pTableInfo-&gt;setTableName(...

Добавить элемент на n-e место в std::vector
Блин нарорд... я затупил по жоскому.... у меня std::vector, пытаюсь добавить элемент на n-e место: using namecpace std; ...

STL
Всем привет :) Задача следующая - Нужно считать из файла строки, запихнуть их в стек и вывести на экран, чтобы перед ними был номер...

18
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.12.2012, 13:23
А зачем? Несколько вариантов.
C++
1
2
3
4
5
typedef std::map<IObserver* const, IObserver* const> observers_t;
for (observers_t::iterator iter = _observers.begin(); iter != _observers.end(); ++iter)
{
    iter->second->handleEvent(*this);
}
И два варианта из С++11.

C++
1
2
3
4
5
6
7
8
9
for (auto pos = std::begin(_observers); pos != std::end(_observers); ++pos)
{
   pos->second->handleEvent(*this);
}
 
for (item pos : _observers)
{
   pos.second->handleEvent(*this);
}
Ну или for_each с функтором/лямбдой etc.
2
Антикодер
Эксперт функциональных языков программирования
1888 / 870 / 48
Регистрация: 15.09.2012
Сообщений: 3,088
10.12.2012, 13:27  [ТС]
да как бы boost подключить не удаётся, а у самого опыта работы с STL не хватает.

как раз C++11 в моём (тяжелом) случае тоже не подходит
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.12.2012, 13:32
XRuZzz, Ну обычный цикл или for_each с функтором...
0
Антикодер
Эксперт функциональных языков программирования
1888 / 870 / 48
Регистрация: 15.09.2012
Сообщений: 3,088
10.12.2012, 13:54  [ТС]
Цитата Сообщение от ForEveR Посмотреть сообщение
или for_each с функтором...
можно поподробнее, а то функторы никогда не использовал
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.12.2012, 14:05
XRuZzz,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <vector>
#include <algorithm>
 
class Printer
{
public:
   Printer(char delim):
   delim_(delim), position(0)
   {
   }
   void operator () (int i) const
   {
      if (position++)
      {
         std::cout << delim_;
      }
      std::cout << i;
   }
private:
   const char delim_;
   mutable size_t position;
};
 
int main()
{
   std::vector<int> v = {1,2,3,4,5};
   std::for_each(v.begin(), v.end(), Printer(','));
   std::cout << std::endl;
}
http://liveworkspace.org/code/108kP4$6

Синтетический пример.
1
 Аватар для Пaтрик
442 / 410 / 132
Регистрация: 21.01.2012
Сообщений: 976
10.12.2012, 14:08
ForEveR, в данной случае у тебя снова C++11 т.к. исполузуется список инициализации
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.12.2012, 14:10
Пaтрик, Не важно. Мне так удобнее. Синтетический пример же.)
0
Антикодер
Эксперт функциональных языков программирования
1888 / 870 / 48
Регистрация: 15.09.2012
Сообщений: 3,088
11.12.2012, 15:31  [ТС]
такая конструкция была в примере на вики Наблюдатель
хотел использовать этот паттерн для реализации MVC

C++
1
typedef std::map<IObserver* const, IObserver* const> observers_t;
тока VS2002 не хочет со словом const компилировать пишет

Code
1
xmemory(87): error C2535: 'std::allocator<_Ty>::pointer std::allocator<_Ty>::address(std::allocator<_Ty>::reference) const' : member function already defined or declared         with         [             _Ty=const std::_Tree<std::_Tmap_traits<behaviour::IObserver *const ,behaviour::IObserver *const ,std::less<behaviour::IObserver *const >,
тогда я просто убираю const? или есть более грамотное решение?

Добавлено через 22 часа 46 минут
Не могли бы вы объяснить ещё такую конструкцию

C++
1
2
3
int IObservable::addObserve(IObserver& ref)
{
    observers.insert(observers_t::value_type(&ref,&ref));
зачем тут ::value_type?
0
 Аватар для Пaтрик
442 / 410 / 132
Регистрация: 21.01.2012
Сообщений: 976
11.12.2012, 15:35
value_type - возвращает какой-то тип данных, а дальше вы передаете в его конструктор два параметра.
1
Антикодер
Эксперт функциональных языков программирования
1888 / 870 / 48
Регистрация: 15.09.2012
Сообщений: 3,088
11.12.2012, 15:50  [ТС]
Цитата Сообщение от Пaтрик Посмотреть сообщение
value_type - возвращает какой-то тип данных
тока не понимаю зачем это нужно делать

почему например нельзя написать observers.insert(observers_t(&ref,&ref)) ;
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
11.12.2012, 15:52
XRuZzz, Потому что это правильнее, чем писать явно. Если есть typedef - стоит писать именно так. Впринципе даже если typedef-а нету, стоит писать так же.
Хотя вполне здесь бы подошло
C++
1
std::make_pair
Эм. Как это почему? Потому что insert принимает map::value_type, а observers_t это у вас как бэ мапа.
0
Антикодер
Эксперт функциональных языков программирования
1888 / 870 / 48
Регистрация: 15.09.2012
Сообщений: 3,088
11.12.2012, 16:02  [ТС]
то есть мы добавляем пару из 2-х указателей в карту и говорим карте какого типа объекты будут храниться под этими указателями?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
11.12.2012, 16:05
XRuZzz, Ничего мы не говорим. Мы конструируем value_type (
C++
1
pair<IObserver* const, IObserver* const>
) и вставляем в мапу.
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
11.12.2012, 18:26
Еще можно так:
C++
1
_observers.insert({&ref, &ref});
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
11.12.2012, 18:31
MrGluck, В С++11 можно. В 03 нет. Тут о 03 речь.)
0
Антикодер
Эксперт функциональных языков программирования
1888 / 870 / 48
Регистрация: 15.09.2012
Сообщений: 3,088
12.12.2012, 17:50  [ТС]
хм почему то в конструкторе класса потомка(класс ...Controller - реализация интерфейса) IObserver

не могу добавить этот контроллер в список получателей обновлений
C++
1
model.addObserve(this);
где model - Потомок класса Observable

на это компилятор пишет мне:
Controller.cpp(19): error C2664: 'behaviour::Observable::addObserve' : cannot convert parameter 1 from 'controller::Controller *const ' to 'behaviour::IObserver &'
не понимаю как это исправить.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
12.12.2012, 18:25
XRuZzz,
C++
1
model.addObserver(*this);
? Или указатели хранить уж если на то пошло.
1
Антикодер
Эксперт функциональных языков программирования
1888 / 870 / 48
Регистрация: 15.09.2012
Сообщений: 3,088
13.12.2012, 00:04  [ТС]
C++
1
*this
Неее... ну так я пробывал, правда не помню как компилятор ругался
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.12.2012, 00:04
Помогаю со студенческими работами здесь

STL: реализовать кольцевой упорядоченный двусвязный список
Добрый вечер всем кто открыл эту вкладку! Надо реализовать кольцевой упорядоченный двозвязний список на STL + некоторые функции работы с...

Каждый отрицательный элемент последовательности заменить на его квадрат
помогите,нужно написать прогу,чтоб каждый отрицательный элемент последовательности заменить на его квадрат.это всё при помощи STL

STL
Существует ли аналог функции STL(C++) в Jav'е?

STL: ввод ФИО и возраста
помогите сделать ввод ФИО и возраста через STL .Вот часть моего кода#include &lt;string&gt; #include &lt;vector&gt; #include...

STL
Доброго времени суток! Возникли трудности с пониманием задачи и принципа работы программы. Задание следующее: &quot;Разработать...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru