Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 49, средняя оценка - 4.84
Union
17 / 17 / 5
Регистрация: 16.08.2010
Сообщений: 252
#1

Массив функций - C++

11.08.2011, 23:33. Просмотров 8258. Ответов 8
Метки нет (Все метки)

Есть функция:
C++
1
bool sota(a& d1, a& d2) {return 1;}
Я вызываю её вот так:
C++
1
sort(mas->begin(), mas->end(), sota);
Мне нужно сделать массив из 10 функций sota, с разными значениями return. К примеру:

C++
1
2
3
4
5
6
sota[0](a& d1, a& d2) {return 7;}
sota[1](a& d1, a& d2) {return 4;}
sota[2](a& d1, a& d2) {return 20;}
sota[3](a& d1, a& d2) {return 1;}
sota[4](a& d1, a& d2) {return 3;}
sota[5](a& d1, a& d2) {return 9;}
И далее вызывать их вот так:
C++
1
2
3
for (int i = 0; i<10;i++) {
     sort(mas->begin(), mas->end(), sota[i]);
}
Подскажите как сделать?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2011, 23:33
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Массив функций (C++):

Дан массив из прототипов функций или указателей на функцию, сделать функцию, возвращающую этот массив
Не охота создавать лишнею тему извиняюсь заранее Вопрос такой Можете подсказать есть массив из прототипов функций или...

Массив функций
Необходимо создать во время выполнения массив функций, как такое можно обеспечить?

Fn(string s) - в массив функций
Есть различные функции хэширования string f1(string s) f2(string s) ... fn(string s) как их все вызвать, не нагромождая код? ...

Массив функций класса
Здравствуйте, нужно сделать массив функций drawtext()...drawtext15(), так как я предлагаю не работает пишет идентификатор не найден,...

Шаблоны функций и двумерный массив
Задание следующее: программа работает с двумерным массивом, получает размерность и элементы, выводит матрицу на экран. Далее подсчитывает...

Создать массив адресов функций
Помогите пожалуйста создать массив адресов функций. Не могу понять как записать это //вид функции bool MyFunc() { ... } ...

8
Ree.exe
56 / 56 / 16
Регистрация: 01.08.2011
Сообщений: 141
12.08.2011, 00:01 #2
Ну можно ещё использовать массив указателей на функцию.
Что-то на подобие такова:
C++
1
2
3
4
5
6
7
8
9
bool sota_0(a& d1, a& d2) {return 7;};
bool sota_1(a& d1, a& d2) {return 4;};
bool sota_2(a& d1, a& d2) {return 20;};
bool sota_3(a& d1, a& d2) {return 1;};
bool sota_4(a& d1, a& d2) {return 3;};
bool sota_5(a& d1, a& d2) {return 9;};
// ...
bool (*pSota_X[10])(a& d1, a& d2)=
{sota_0,sota_1, sota_2, sota_3, sota_4, sota_5 /*  ...  */};
2
Сыроежка
Заблокирован
12.08.2011, 00:05 #3
Цитата Сообщение от Union Посмотреть сообщение
Есть функция:
C++
1
bool sota(a& d1, a& d2) {return 1;}
Я вызываю её вот так:
C++
1
sort(mas->begin(), mas->end(), sota);
Мне нужно сделать массив из 10 функций sota, с разными значениями return. К примеру:

C++
1
2
3
4
5
6
sota[0](a& d1, a& d2) {return 7;}
sota[1](a& d1, a& d2) {return 4;}
sota[2](a& d1, a& d2) {return 20;}
sota[3](a& d1, a& d2) {return 1;}
sota[4](a& d1, a& d2) {return 3;}
sota[5](a& d1, a& d2) {return 9;}
И далее вызывать их вот так:
C++
1
2
3
for (int i = 0; i<10;i++) {
     sort(mas->begin(), mas->end(), sota[i]);
}
Подскажите как сделать?
Объявляете массив функций. Например,

bool ( *f )( a &, a & )[5] = { sota0, sota1, sota2, sota3, sota4 };
1
Ree.exe
56 / 56 / 16
Регистрация: 01.08.2011
Сообщений: 141
12.08.2011, 00:11 #4
Цитата Сообщение от Union Посмотреть сообщение
Код C++
sota[0](a& d1, a& d2) {return 7;}
sota[1](a& d1, a& d2) {return 4;}
sota[2](a& d1, a& d2) {return 20;}
sota[3](a& d1, a& d2) {return 1;}
sota[4](a& d1, a& d2) {return 3;}
sota[5](a& d1, a& d2) {return 9;}
А зачем эти все функции? Они ведь всёравно вернут или 0(false) или 1(true)?(То что у тебя есть вернёт 1)
0
Union
17 / 17 / 5
Регистрация: 16.08.2010
Сообщений: 252
12.08.2011, 00:20  [ТС] #5
Это для примера, там будет разный большой код.... но да, в конечном итоге всеравно 0 или 1

Добавлено через 2 минуты
Сыроежка, а можно подробнее, как обращаться к такому массиву в итоге, и как его правильно объявить?

Добавлено через 4 минуты
ошибка: ‘f’ declared as function returning an array
0
Ree.exe
56 / 56 / 16
Регистрация: 01.08.2011
Сообщений: 141
12.08.2011, 00:21 #6
Для моего примера вот так
pSota_X[i](d1, d2);
1
Union
17 / 17 / 5
Регистрация: 16.08.2010
Сообщений: 252
12.08.2011, 00:22  [ТС] #7
Ага, спасибо, разобрался
0
Сыроежка
Заблокирован
12.08.2011, 00:43 #8
Цитата Сообщение от Union Посмотреть сообщение
Это для примера, там будет разный большой код.... но да, в конечном итоге всеравно 0 или 1

Добавлено через 2 минуты
Сыроежка, а можно подробнее, как обращаться к такому массиву в итоге, и как его правильно объявить?

Добавлено через 4 минуты
ошибка: ‘f’ declared as function returning an array
Я допустил ошибку. Правильно будет

C++
1
bool ( *f[5] )( a &, a & ) = { sota0, sota1, sota2, sota3, sota4 };
Но чтобы таких ошибок не допускать, проще работать с typedef

Например,

typedef bool fn( a &, a& );

C++
1
fn *af[] = { sota0, sota1, sota2, sota3, sota4 };
0
alex_x_x
бжни
2454 / 1660 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
12.08.2011, 01:03 #9
Лучший ответ Сообщение было отмечено как решение

Решение

в c++0x

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <functional>
#include <vector>
#include <iostream>
 
int f0( int a, int b ) { return a*b; }
int f1( int a, int b ) { return a+b; }
int f2( int a, int b ) { return a-b; }
int f3( int a, int b ) { return a/b; }
 
int main()
{
  std::vector<std::function<int (int,int)> > v = {f0, f1, f2, f3};
  std::cout << v[2]( 10, 15 ) << std::endl;
  return 0; 
}
Добавлено через 6 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <functional>
#include <vector>
#include <iostream>
 
int main()
{
  std::vector<std::function<int (int,int)> > v = {
      [](int x, int y) { return x * y; },
      [](int x, int y) { return x + y; },
      [](int x, int y) { return x - y; },
      [](int x, int y) { return x / y; }     
  };
  std::cout << v[2]( 10, 15 ) << std::endl;  
  return 0; 
}
4
12.08.2011, 01:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2011, 01:03
Привет! Вот еще темы с решениями:

Одномерные массив (Шаблоны функций)
Задание. Вот задание из одномерных массивов Вот решенное задание из одномерных массивов #include &lt;vcl.h&gt; #pragma...

Шаблоны функций и массив указателей
Задание! Создайте шаблонную функцию maxn(), которая принимает в качестве аргумента массив элементов типа Т и целое число, представляющее...

Двумерный массив(в виде функций)
#include &lt;iostream.h&gt; #include&lt;conio.h&gt; const int n=3, m=4; void InArray(int a); void Change(int a,int kol); void PrintArray (int...

Оформить одномерный массив в виде функций
и снова я мучаюсь с функциями:wall: и кажется снова они получились вложенными:gscratch: 1.) вычислить номер максимального по...


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

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

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