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

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

Войти
Регистрация
Восстановить пароль
 
anti-k
227 / 75 / 23
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
#1

Typedef и массивы указателей на функции - C++

25.09.2015, 09:49. Просмотров 197. Ответов 10
Метки нет (Все метки)

Вроде работает, но уверен что что то делаю не так, подскажите как лучше.
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
#include<windows.h>
#include<ctime>
#include<algorithm>
using namespace std;
void OutPut(int*arr,int size);
 
int* Sort_m(int* arr,int size);
int* Sort_l(int* arr,int size);
 
typedef int*(*ssort)(int*,int);
 
ssort edit[]={Sort_m,Sort_l};
int main(){
    int n=10;
    
    int* arr=new int [n];
    
    for(int i=0;i<n;i++){
       arr[i]=rand()%10;
    }
    OutPut(arr,n);  
    
    arr=edit[0](arr,n);
 
        OutPut(arr,n);
 
    
    arr=edit[1](arr,n);
 
        OutPut(arr,n);
    
    delete[]arr;
    
    return 0;
}
void OutPut(int*arr,int size){
    for(int i=0;i<size;i++)
    cout<<arr[i]<<" ";
    cout<<endl<<endl;
}
int* Sort_m(int* arr,int size){
    sort(arr,arr+size);
    return arr;
}
int* Sort_l(int* arr,int size){
    reverse(arr,arr+size);
    return arr;
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2015, 09:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Typedef и массивы указателей на функции (C++):

Указатели и массивы. Индексация с помощью указателей. Передача массивов в функции. Динамические массивы (обработка матриц) - C++
Для каждого элемента , bij, i= 1,...,n , j=1,...,n определяется свой многоугольник местонахождением соответствующего элемента aij (см....

Массивы указателей на функции-члены не работают - C++
всем привет. по книге джеса либерти переписал код массива указателей на функции члены, но код выдает ошибку. Вызове функции отсутствует...

Создание массивов указателей на массивы указателей - C++
Помогите в решении задачи: создал массив указателей на массивы указателей на строки, но компилятор ругается на то что не может...

Почему в сортировке указателей на объекты в вызове функции используются адреса объектов, а не указателей? - C++
Доброго времени суток! Рассматриваю пример (из Лафоре) сортировки массива указателей на объекты, для чего используются указатели на...

Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей - C++
Задача: создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей. Вернуть адрес...

Указатели на функции + typedef - C++
Здравствуйте , я вот встретил такую конструкцию typedef int(*compare_func_t)(const void*val1, const void*val2); Не понял что она означает...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
DrOffset
7152 / 4293 / 968
Регистрация: 30.01.2014
Сообщений: 7,093
25.09.2015, 10:21 #2
Цитата Сообщение от anti-k Посмотреть сообщение
arr=edit[0](arr,n);
Цитата Сообщение от anti-k Посмотреть сообщение
arr=edit[1](arr,n);
Ну разве что перезаписывание arr выглядит несколько странно (но не влияет на корректность в данном случае), а в остальном все верно, по крайней мере с точки зрения кода.
Откуда сомнения?
И исходную задачу неплохо бы озвучить.
1
anti-k
227 / 75 / 23
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
25.09.2015, 10:30  [ТС] #3
DrOffset, Задача проста, сортировка массивов не используя условий и свичей, опираясь на указатели на функции и использовать typedef. А никак нельзя избежать
C++
1
2
int* Sort_m(int* arr,int size);
int* Sort_l(int* arr,int size);
этих строчек ???
0
DrOffset
7152 / 4293 / 968
Регистрация: 30.01.2014
Сообщений: 7,093
25.09.2015, 10:41 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от anti-k Посмотреть сообщение
никак нельзя избежать
Можно
Кликните здесь для просмотра всего текста
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
#include<windows.h>
#include<ctime>
#include<algorithm>
using namespace std;
void OutPut(int*arr,int size);
 
int* Sort_m(int* arr,int size){
    sort(arr,arr+size);
    return arr;
}
int* Sort_l(int* arr,int size){
    reverse(arr,arr+size);
    return arr;
}
 
typedef int*(*ssort)(int*,int);
 
ssort edit[]={Sort_m,Sort_l};
int main(){
    int n=10;
    
    int* arr=new int [n];
    
    for(int i=0;i<n;i++){
       arr[i]=rand()%10;
    }
    OutPut(arr,n);  
    
    arr=edit[0](arr,n);
 
        OutPut(arr,n);
 
    
    arr=edit[1](arr,n);
 
        OutPut(arr,n);
    
    delete[]arr;
    
    return 0;
}
void OutPut(int*arr,int size){
    for(int i=0;i<size;i++)
    cout<<arr[i]<<" ";
    cout<<endl<<endl;
}

Или даже так (С++11):
Кликните здесь для просмотра всего текста
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
#include<ctime>
#include<algorithm>
#include<iostream>
using namespace std;
void OutPut(int*arr,int size);
 
typedef void (*ssort)(int*,int);
 
ssort edit[]= {
     [](int* arr, int size) { sort(arr,arr+size); }
   , [](int* arr, int size) { reverse(arr,arr+size); }
};
 
int main(){
    int n=10;
 
    int* arr=new int [n];
 
    for(int i=0;i<n;i++){
       arr[i]=rand()%10;
    }
    OutPut(arr,n);
 
    edit[0](arr,n);
 
        OutPut(arr,n);
 
 
    edit[1](arr,n);
 
        OutPut(arr,n);
 
    delete[]arr;
 
    return 0;
}
void OutPut(int*arr,int size){
    for(int i=0;i<size;i++)
    cout<<arr[i]<<" ";
    cout<<endl<<endl;
}
1
anti-k
227 / 75 / 23
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
25.09.2015, 10:46  [ТС] #5
Цитата Сообщение от DrOffset Посмотреть сообщение
ssort edit[]= {
* * *[](int* arr, int size) { sort(arr,arr+size); }
* *, [](int* arr, int size) { reverse(arr,arr+size); }
};
То что искал!!!! В точку!! Только в С++ 11?
0
DrOffset
7152 / 4293 / 968
Регистрация: 30.01.2014
Сообщений: 7,093
25.09.2015, 10:49 #6
Цитата Сообщение от anti-k Посмотреть сообщение
Только в С++ 11?
Да. Или выше.
0
anti-k
227 / 75 / 23
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
25.09.2015, 11:03  [ТС] #7
DrOffset, А если я спрошу на форуме, где скачать ровный и вообще четкий )) халявный Visual, это будет нарушение? Сам гуглил, качал, но не совсем то что искал, к примеру С++11 не поддерживает (((
0
Croessmah
Эксперт CЭксперт С++
13226 / 7498 / 845
Регистрация: 27.09.2012
Сообщений: 18,416
Записей в блоге: 3
Завершенные тесты: 1
25.09.2015, 11:04 #8
Цитата Сообщение от anti-k Посмотреть сообщение
где скачать ровный и вообще четкий )) халявный Visual, это будет нарушение?
прям на сайте microsoft, представьте себе
1
DrOffset
7152 / 4293 / 968
Регистрация: 30.01.2014
Сообщений: 7,093
25.09.2015, 11:07 #9
Цитата Сообщение от anti-k Посмотреть сообщение
А если я спрошу на форуме, где скачать ровный и вообще четкий )) халявный Visual, это будет нарушение?
Смотря как спрашивать. Если крякнутый нужен, то будет.
А вообще Visual Studio Express или Community 2013 или 2015 поддерживают многие возможности С++11. Скачать можно бесплатно с сайта Microsoft.
1
anti-k
227 / 75 / 23
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
25.09.2015, 11:11  [ТС] #10
Croessmah, Здравствуйте!
0
Croessmah
25.09.2015, 11:13     Typedef и массивы указателей на функции
  #11

Не по теме:

Цитата Сообщение от anti-k Посмотреть сообщение
Здравствуйте
Приветствую

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

массивы указателей,указатели на массивы - C++
Понимаю что тема эта изжевана, но я ещё жую.Хочу, чтобы усвоилось. допустим есть QStringList a; a.append(&quot;мамa&quot;); ...

массивы указателей,указатели на массивы - C++
Понимаю что тема эта изжевана, но я ещё жую.Хочу, чтобы усвоилось. допустим есть QStringList a; a.append(&quot;мамa&quot;); ...

Массивы указателей - C++
#include &quot;stdafx.h&quot; #include &quot;stdlib.h&quot; #include &quot;locale.h&quot; #include &quot;stdio.h&quot; void p1(float &amp;); void p2(float &amp;); void...

Массивы указателей - C++
Дан код: const int Width = 3; const int Height = 5; char arr2 = { &quot;1str&quot;, &quot;2str&quot;, &quot;3str&quot;}; char(*x) = arr2; ...


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

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

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