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

Как вернуть динамически растущий массив из функции? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Abbat_90
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 26
18.11.2011, 10:47     Как вернуть динамически растущий массив из функции? #1
Подскажите плиз, может кто знает, не могу вернуть ни ссылку ни указатель на массив...
В задании необходимо в качестве параметра передать обычный массив и вернуть динамически растущий...

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <conio.h>
#include <iostream.h>
#include <vector>
#include <stdlib>
 
using namespace std;
 
vector fRestruct(int  mas[], int  size)
    {
     int i=1, elem, sum=0, arifm=0, counter;
     vector <int> vMas;
     for (i = 0; i <size; i++)
        {
         vMas.push_back(mas[i]);
        }
 
             i=0;
             elem = vMas[i];
             while (elem>=0)
             {
              elem = vMas[i+1];
              i++;
             // cout<<endl<<elem<<endl<<endl;
 
             }
 
     for (i = 0; i < vMas.size(); i++)
        {
         vMas[i]*=elem;
         i++;
        }
 
    for (i = 0; i < vMas.size(); i++)
        {
         sum+=vMas[i];
        }
 
 
     arifm=sum / vMas.size();
     vMas.push_back(sum);
     vMas.push_back(arifm);
 
     for (i = 0; i < vMas.size(); i++)
        {
         cout<<"!"<<vMas[i]<<endl;
        }
     return vMas;
    }
 
 
main ()
{
int const a = 4;
int mas[a], i;
randomize();
int* rez;
for (i = 0; i <a; i++)
    {
     mas[i] = rand()%101 - 50;
    }
 
for (i = 0; i <a; i++)
    {
     cout<<mas[i]<<endl;
    }
cout<<endl<<endl;
rez= fRestruct (mas, a);
 
getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2011, 10:47     Как вернуть динамически растущий массив из функции?
Посмотрите здесь:

Вернуть массив из функции C++
C++ Возможно ли вернуть из функции ссылку на массив
Как вернуть массив из функции? C++
Вернуть указатель на массив из функции C++
Как вернуть массив из функции? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
18.11.2011, 10:56     Как вернуть динамически растущий массив из функции? #2
Потому что ни ссылку, ни указатель для локальных объектов возвращать низя.
У тебя же возвращается вектор по значению и пытается присвоиться указателю на int. И чему ты удивляешься?
Abbat_90
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 26
18.11.2011, 10:59  [ТС]     Как вернуть динамически растущий массив из функции? #3
Всё конечно прикольно только можно поподробнее... допустим указатель инт эт точнонеправильно, эт ясно, только вот компилятор выдаёт ошибку если я ставлю тип возвращаемого объекта - vector... Объясни чуть подробнее если можешь. Спасибо.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
18.11.2011, 11:03     Как вернуть динамически растущий массив из функции? #4
Вот что ты пишешь:
C++
1
2
vector v;
int * p = v;
В этом коде три ошибки. Когда разберёшься, будем продолжать.
Abbat_90
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 26
18.11.2011, 11:10  [ТС]     Как вернуть динамически растущий массив из функции? #5
вижу две...
неправильная инициализация контейнера и указатель типа инт на тип вектор...
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
18.11.2011, 11:23     Как вернуть динамически растущий массив из функции? #6
Третья в том, что нужно ещё адрес v получать, чтобы указателю (правильному) присвоить.

Вооот. Т.е. ты вроде понимаешь как должно быть в простом случае. С функцией всё то же самое, но вместо v есть результат работы функции.
Теперь внимательно посмотри строки 8 и 67.

Добавлено через 52 секунды
Цитата Сообщение от Abbat_90 Посмотреть сообщение
указатель типа инт на тип вектор
присваивание значения типа вектор, указателю на тип инт.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2011, 12:03     Как вернуть динамически растущий массив из функции?
Еще ссылки по теме:

C++ Как вернуть массив из функции?
C++ Как вернуть массив из функции?
C++ Вернуть двумерный массив из функции

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
18.11.2011, 12:03     Как вернуть динамически растущий массив из функции? #7
Думаю, с этим
Цитата Сообщение от Abbat_90 Посмотреть сообщение
указатель типа инт на тип вектор
проблема возникла из-за того, что так можно делать с обычными сырыми массивами (когда имя массива можно интерпретировать как указатель на его начало). Однако с вектором это не так, ведь вектор - не массив, а объект, и его уже невозможно таким образом привести к типу массива, который этот вектор инкапсулирует.
Yandex
Объявления
18.11.2011, 12:03     Как вернуть динамически растущий массив из функции?
Ответ Создать тему
Опции темы

Текущее время: 01:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru