Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
 Аватар для Aecttann
6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359

Std::function and std::vector

20.10.2015, 00:43. Показов 4335. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как положить обёртки в вектор?
Не используя библиотеку boost.
Код
C++
1
2
3
4
5
6
7
8
9
    function<void(int)> first_func() = one();
    function<void(int)> second_func() = two();
    function<void(int)> third_func() = three();
 
    vector<function<void(int)>> my_functions;
 
//  my_functions.push_back(first_func());
//  my_functions.push_back(second_func());
//  my_functions.push_back(third_func());
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.10.2015, 00:43
Ответы с готовыми решениями:

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами
подскажите есть вот такая задача. Есть список . Создать второй список, в котором будут все эти же числа, но не в виде строк, а в виде...

Как передать целочисленную матрицу типа std::vector<std::vector<int> > в функцию?
Здравствуйте. Почитал на форуме, но так и не понял что я делаю не так. Имеется двумерный вектор. Размера .. Нужно его передать в...

Как изменять размер std::vector<std::vector>?
Здравствуйте, как нужно изменять размер std::vector&lt;std::vector&gt; например: std::vector&lt;std::vector&lt;float&gt;&gt; data; ...

9
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
20.10.2015, 00:52
Лучший ответ Сообщение было отмечено Aecttann как решение

Решение

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
31
32
33
34
35
36
37
38
39
40
41
42
//Title of this code
//g++  4.9.2
 
#include <iostream>
#include <functional>
#include <vector>
 
using std::function ;
using std::vector ;
 
void one(int)
{
    std::cout << "one" << std::endl ;
}
 
void two(int)
{
    std::cout << "two" << std::endl ;
}
 
void three(int)
{
    std::cout << "three" << std::endl ;
}
 
 
int main()
{
    function<void(int)> first_func = one;
    function<void(int)> second_func = two;
    function<void(int)> third_func = three;
 
    vector<function<void(int)>> my_functions;
    
    my_functions.push_back ( first_func ) ;
    my_functions.push_back ( second_func ) ;
    my_functions.push_back ( third_func ) ;
    
    for ( auto & foo : my_functions )
        foo(0) ;
    
}
http://rextester.com/OCBJO9623
1
 Аватар для Aecttann
6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
20.10.2015, 01:08  [ТС]
Croessmah, спасибо
а что это?
C++
1
2
    for ( auto & foo : my_functions )
        foo(0) ;
0
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
20.10.2015, 01:22
вот разные std::function в одном векторе(код не мой):
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <functional>
#include <memory>
#include <vector>
 
void foo(int) {
    std::cout << "I'm foo!\n";
}
 
int bar(char, double) {
    std::cout << "I'm bar!\n";
}
 
class MyFunction {
    public:
        virtual ~MyFunction(){}
 
        virtual void operator()() = 0;
};
 
class MyFunctionA : public MyFunction {
    public:
        virtual void operator()() {
            foo(4);
        }
};
 
class MyFunctionB : public MyFunction {
    public:
        MyFunctionB(std::function<int(char,double)> f, char arg1, double arg2) : fun_(f), arg1_(arg1), arg2_(arg2) {} 
 
        virtual void operator()() {
            fun_(arg1_, arg2_);
        }
    private:
        std::function<int(char,double)> fun_;
        char arg1_;
        double arg2_;
};
 
int main() {
    using MyFunPtr = std::unique_ptr<MyFunction>;
    std::vector<MyFunPtr> v;
 
    v.emplace_back(new MyFunctionA());
    v.emplace_back(new MyFunctionB(bar, 'c', 3.4));
 
    for ( auto&& myfun : v ) {
        (*myfun)();
    }
    return 0;
}
1
 Аватар для Aecttann
6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359
20.10.2015, 01:26  [ТС]
Croessmah, я понял, это обращение к функциям, через вектор. но как это работает?
допустим, я хочу сделать что-либо, между вызовами этих функций - записать в файл, вывести перед каждой функцией что-либо на экран и т.д. Как мне вызвать не все сразу, а обращаться к ним поочерёдно?
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
20.10.2015, 01:35
Цитата Сообщение от Aecttann Посмотреть сообщение
Как мне вызвать не все сразу, а обращаться к ним поочерёдно?
Также как обращаетесь к содержимому любого другого вектора.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
20.10.2015, 02:02
Цитата Сообщение от tapochka Посмотреть сообщение
вот разные std::function в одном векторе(код не мой):
зачем было городить огород?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <functional>
#include <vector>
 
void foo(int) { std::cout << "I'm foo!\n"; }
 
int bar(char, double) { std::cout << "I'm bar!\n"; return 0; }
 
int main() 
{
    std::vector< std::function<void()> > v;
 
    v.emplace_back( std::bind(foo, 4) );
    v.emplace_back( std::bind(bar, 'c', 3.4) );
 
    for (const auto& myfun : v)
        myfun();
}
2
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
20.10.2015, 02:10
hoggy, неплохо)

Добавлено через 7 минут
лично мне это совсем не очевидно было... я даже до сих пор не могу понять почему ваш код работает... там же bind возвращает не std::function<void()>... как же так
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
20.10.2015, 02:17
Цитата Сообщение от tapochka Посмотреть сообщение
там же bind возвращает не std::function<void()>... как же так
std::function - просто тонкая обертка над функторами, которые она цепляет по значению.
жрет любые функторы, лишь бы имели в наличии подходящий оператор()

поэтому, std::function жрёт и продукты биндов (бинд готовит шаблоно-функторы),
и лямбды (синтаксический сахар над функтором),
может сожрать и функтор того господина,
что навелосипедил в приведенном вами фрагменте.
0
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
20.10.2015, 02:19
Цитата Сообщение от hoggy Посмотреть сообщение
жрет любые функторы, лишь бы имели в наличии подходящий оператор()
хм, да...
C++
1
2
std::function<void(std::string)> dsk =  std::bind(bar, 'c', 3.4);
dsk("wtf??");
компилируется... век живи - век учись
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.10.2015, 02:19
Помогаю со студенческими работами здесь

Вывести значения std::vector<std::vector<int*> >
Подскажите, как вывести значения? const size_t row = 3; const size_t col = 3; std::vector&lt;std::vector&lt;int*&gt; &gt; imatrix; ...

Реализация класса MyString. Стандартная библиотека, std::string, std::vector
как добавить реализацию конкатенации строк через перегрузку оператора &quot;+=&quot; в классе MyString и почему ошибка выдается???#include...

Передача функции указатель на элемент std::vector<std::string>
Доброй ночи тем, кому не спится (или живет в другом часовом поясе:p)! Есть функция, требующая в качестве параметра указатель на...

Статическая и динамическая матрица на std::array and std::vector
Всем привет. Решил немного поиграться с шаблонами. Скилл чуть больше 0. Можно ли с помощью шаблонной магии подставить вместо...

std::map, std::vector и порядок обхода коллекции
Здравствуйте, уважаемые! Вопрос следующий - если я сохраняю какие-то значения в map или вектор, то всегда ли я буду получать тот-же...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru