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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 44, средняя оценка - 4.70
SSxMe
14 / 14 / 1
Регистрация: 09.05.2010
Сообщений: 79
#1

Как вернуть массив? - C++

15.05.2010, 16:57. Просмотров 5367. Ответов 22
Метки нет (Все метки)

Как вернуть массив из функции и узнать его размер?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2010, 16:57     Как вернуть массив?
Посмотрите здесь:

Почему функция не может вернуть массив, но может вернуть структуру содержащий массив? - C++
Почему функция не может вернуть массив, но может вернуть структуру содержащую массив? Согласитесь что это некоторое несовершенство языка...

Как вернуть массив - C++
Можно ли вернуть массив через возвращаемое значение? Если нет, то как можно сделать вывод массива в main?

Как вернуть массив? - C++
Нужно вернуть массив из функции, как это сделать? #include "stdafx.h" #include <iostream> #include <Windows.h> #include <time.h> ...

Как вернуть массив? - C++
Как правильно вернуть локальный массив (вместе с размером) из одной функции в main-функцию и потом передать его в третью функцию? int*...

Как вернуть массив? - C++
Есть программа #include "stdafx.h" int fun1(int mas,int r) { int i; for (i=0;i<r;i++) { mas=i;

Как вернуть массив? - C++
Функция вроде как работает. Но функция "printMass(mas, l);" дожа выводить этот новый массив, она тоже работает но после "return mas;" в...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.05.2010, 17:02     Как вернуть массив? #2
SSxMe, возвратить - легко, узнать размер - никак.
Так что, тем или иным образом необходимо сообщить вызывающей функции и адрес массива и его размер.
Самый простой вариант:
C++
1
2
3
4
5
6
7
8
9
struct Array {
  int* p;
  int size;
}
 
Array CreateArray(int size) {
  Array result = { new int[size], size };
  return result;
}
Adler
78 / 78 / 3
Регистрация: 07.05.2009
Сообщений: 316
15.05.2010, 17:04     Как вернуть массив? #3
Верни указатель на первый элемент. А если нужен размер, то никак.
Зато можно завернуть указатель и размер массива в структуру и её вернуть как результат вызова функции.

Добавлено через 22 секунды
неуспел
SSxMe
14 / 14 / 1
Регистрация: 09.05.2010
Сообщений: 79
15.05.2010, 17:06  [ТС]     Как вернуть массив? #4
спасибо всем))
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
15.05.2010, 17:07     Как вернуть массив? #5
Еще вариант malloc

Добавлено через 36 секунд
Как раз из функции массив может вернуть.
SSxMe
14 / 14 / 1
Регистрация: 09.05.2010
Сообщений: 79
15.05.2010, 17:07  [ТС]     Как вернуть массив? #6
Еще вариант malloc
а это вроде бы устаревшее
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.05.2010, 17:07     Как вернуть массив? #7
Цитата Сообщение от Genius Ignat Посмотреть сообщение
Еще вариант malloc
Для СИ - вариант, для С++ - нет.
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
15.05.2010, 17:08     Как вернуть массив? #8
а это вроде бы устаревшее
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.05.2010, 17:08     Как вернуть массив? #9
Цитата Сообщение от SSxMe Посмотреть сообщение
а это вроде бы устаревшее
Для СИ другого способа нет.
SSxMe
14 / 14 / 1
Регистрация: 09.05.2010
Сообщений: 79
15.05.2010, 17:09  [ТС]     Как вернуть массив? #10
Я на с++ пишу
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.05.2010, 17:11     Как вернуть массив? #11
Цитата Сообщение от SSxMe Посмотреть сообщение
Я на с++ пишу
Если ограничений нет - используй std::vector и не парься с памятью, размерами и т.д.
SSxMe
14 / 14 / 1
Регистрация: 09.05.2010
Сообщений: 79
15.05.2010, 17:20  [ТС]     Как вернуть массив? #12
спасибо, вот так сделал..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <vector>
using namespace;
 
vector<int> AnyFunction(){
    vector<int> AnyArray;
    AnyArray.push_back(3);
    AnyArray.push_back(6786);
    ...
    return AnyArray;
}
 
int main(){
    
    vector<int> AnyArray = AnyFunction(); // вернуть массив
    cout<<AnyArray.size()<<endl; // узнать размер массива
    return 0;
}
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
15.05.2010, 17:20     Как вернуть массив? #13
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
и не парься с памятью, размерами и т.д.
париться то все-равно придется, так как вектор все равно надо будет создавать динамически
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.05.2010, 17:23     Как вернуть массив? #14
Цитата Сообщение от alex_x_x Посмотреть сообщение
париться то все-равно придется, так как вектор все равно надо будет создавать динамически
std::vector можно и по значению возвращать, тогда париться не придется.
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
15.05.2010, 17:25     Как вернуть массив? #15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <vector>
using namespace std;
 
void AnyFunction(vector<int>& AnyArray){
    AnyArray.push_back(3);
    AnyArray.push_back(6786);
    ...
}
 
int main(){
    
    vector<int> AnyArray;
           AnyFunction( AnyArray ); // вернуть массив
    cout<<AnyArray.size()<<endl; // узнать размер массива
    return 0;
}
так избавишься от бесполезных копирований

Добавлено через 1 минуту
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
std::vector можно и по значению возвращать, тогда париться не придется.
дада, вы правы, но это приведет к вызову конструктора копирования
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.05.2010, 17:26     Как вернуть массив? #16
Цитата Сообщение от alex_x_x Посмотреть сообщение
дада, вы правы, но это приведет к вызову конструктора копирования
Ну чтож, придется выбирать между быстродействием и удобством. Не думаю, что первый фактор является определяющим.
alex_x_x, vector<int> AnyArray; забыл убрать из функции.
SSxMe
14 / 14 / 1
Регистрация: 09.05.2010
Сообщений: 79
15.05.2010, 17:34  [ТС]     Как вернуть массив? #17
А если у меня есть в определении класса массив, который формируется одной из функций класса, то как его вернуть, чтобы внешняя программа не могла его повредить?

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
#include <iostream>
#include <vector>
using namespace std;
 
class AnyClass{
public:
    void Function1();
    void AnyFunction(vector<int>);
private:
    vector<int> AnyArray;
};
 
void AnyClass::Function1(){
    // здесь формируется массив this->AnyArray;
}
void AnyClass::AnyFunction(vector<int>& param){
    param = this->AnyArray;
}
 
int main(){
           AnyClass anyclass;
           anyclass.Function1();
    vector<int> AnyArray;
    anyclass.AnyFunction(AnyArray); // вернуть массив
    cout<<AnyArray.size()<<endl; // узнать размер массива
    return 0;
}
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
15.05.2010, 17:40     Как вернуть массив? #18
в таком виде вы ничего не возвращате, ссылка это синоним, возвращайте по значению
SSxMe
14 / 14 / 1
Регистрация: 09.05.2010
Сообщений: 79
15.05.2010, 17:46  [ТС]     Как вернуть массив? #19
то есть вот так?
C++
1
2
3
vector<int> AnyClass::AnyFunction(){
        return this->AnyArray;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2010, 17:49     Как вернуть массив?
Еще ссылки по теме:

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

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

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

как вернуть массив и как неявно получить атрибут объекта - C++
хочу спросить как из функции вернуть массив int g(void){ int a; //как-то его заполнить return a; } массив...


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

Или воспользуйтесь поиском по форуму:
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
15.05.2010, 17:49     Как вернуть массив? #20
SSxMe,
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
#include <iostream>
#include <vector>
using namespace std;
 
class AnyClass{
public:
        void Function1();
        vector<int> AnyFunction();
private:
        vector<int> AnyArray;
};
 
void AnyClass::Function1(){
        // здесь формируется массив this->AnyArray;
}
vector<int> AnyClass::AnyFunction(){
        return AnyArray;
}
 
int main(){
           AnyClass anyclass;
           anyclass.Function1();
        
        vector<int> AnyArray = anyclass.AnyFunction(); // вернуть массив
        cout<<AnyArray.size()<<endl; // узнать размер массива
        return 0;
}
Цитата Сообщение от SSxMe Посмотреть сообщение
то есть вот так?
C++
1
2
3
vector<int> AnyClass::AnyFunction(){
        return this->AnyArray;
}
Именно так. Только this ни к чему.
Yandex
Объявления
15.05.2010, 17:49     Как вернуть массив?
Ответ Создать тему
Опции темы

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