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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Abbat_90
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 26
#1

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

18.11.2011, 10:47. Просмотров 1250. Ответов 6
Метки нет (Все метки)

Подскажите плиз, может кто знает, не могу вернуть ни ссылку ни указатель на массив...
В задании необходимо в качестве параметра передать обычный массив и вернуть динамически растущий...

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();
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2011, 10:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как вернуть динамически растущий массив из функции? (C++):

Как вернуть массив из функции? - C++
у меня есть две функции: Одна должна возвращать три числа, а вторая двумерный массив 10Х10; Как это провернуть?

Как вернуть массив из функции? - C++
Please! #include &lt;iostream&gt; using namespace std; int _plus1 (int array ) { for (int i = 0; i &lt; 5; i++){ array...

Как вернуть массив из функции? - C++
В общем есть функция: ? foo() { array&lt;array&lt;double, N&gt;, 10&gt; Wave; .... return ?; } Как правильно написать return?

Как вернуть массив из функции? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int mass(int n) { int* Mass = new int; //здесь...

Как вернуть массив из функции? - C++
int SumElementovStolbca(int M, int mas, int N) { int sum = 0; for (int i = 0; i&lt;N; i++) { for (int j = 0; j&lt;N; j++) {...

Как из функции вернуть массив символов? - C++
Здравствуйте.Как возвратить массив символов?Читал другие темы,понял что надо создавать динамическую память,потом удалять её,по другому...

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

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

Добавлено через 52 секунды
Цитата Сообщение от Abbat_90 Посмотреть сообщение
указатель типа инт на тип вектор
присваивание значения типа вектор, указателю на тип инт.
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
18.11.2011, 12:03 #7
Думаю, с этим
Цитата Сообщение от Abbat_90 Посмотреть сообщение
указатель типа инт на тип вектор
проблема возникла из-за того, что так можно делать с обычными сырыми массивами (когда имя массива можно интерпретировать как указатель на его начало). Однако с вектором это не так, ведь вектор - не массив, а объект, и его уже невозможно таким образом привести к типу массива, который этот вектор инкапсулирует.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2011, 12:03
Привет! Вот еще темы с ответами:

Как вернуть из функции указатель на массив элементов класса - C++
Здравствуйте! Возникла такая проблема. Есть класс, созданный мной. Функция формирует массив элементов этого класса (массив...

Как вернуть из функции ссылку на статически создаваемый двумерный массив? - C++
foo(...){ static int Arr return Arr; } int ((foo)(const int m)) //Неверно

Вернуть массив из функции - C++
Помогите пожалуйста, не получается вернуть массив #include &lt;iostream&gt; using namespace std; int input (int*array2) { int n; ...

Вернуть массив из функции - C++
Допустим есть класс Test: class Test { private: float point; };


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

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

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