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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 49, средняя оценка - 4.84
Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
#1

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

11.08.2011, 23:33. Просмотров 7121. Ответов 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++):

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

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

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

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

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

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

8
Ree.exe
56 / 56 / 4
Регистрация: 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 / 4
Регистрация: 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 / 2
Регистрация: 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 / 4
Регистрация: 01.08.2011
Сообщений: 141
12.08.2011, 00:21 #6
Для моего примера вот так
pSota_X[i](d1, d2);
1
Union
17 / 17 / 2
Регистрация: 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
бжни
2447 / 1652 / 84
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2011, 01:03
Привет! Вот еще темы с ответами:

Двумерный массив(в виде функций) - C++
#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...

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
12.08.2011, 01:03
Ответ Создать тему
Опции темы

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