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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.81
Arcor
4799 / 1800 / 159
Регистрация: 20.11.2009
Сообщений: 5,696
Записей в блоге: 1
#1

Вернуть матрицу из функции - C++

15.04.2012, 15:21. Просмотров 3403. Ответов 26
Метки нет (Все метки)

собственно такой вопрос, любыми методами нужно передать двумерный массив через функцию обратно, я не знаю как сделать это в с++, знаю только как в дельфи сделать это можно, но понадобилось решение в с++

кто в курсе, объясните или напишите пожалуйста небольшой пример

заранее спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2012, 15:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вернуть матрицу из функции (C++):

Заполнить матрицу случайными числами. Вернуть матрицу на 90o по часовой стрелке - C++
Заполнить матрицу случайными числами. Вернуть матрицу на 90o по часовой стрелке.

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

Динамическое выделение памяти внутри функции (что вернуть из функции, если не удалось выделить память?) - C++
такое дело, есть функция, которая выполняет некоторую операцию, функция при успешном выполнении должна вернуть 0, при ниудачном код...

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

Вернуть 2 параметра из функции - C++
Доброе время суток. Объясните, пожалуйста как вернуть 2 параметра из функции? Очень желательно на таком примере - Написать функцию...

Вернуть из функции 2 значения - C++
Как вернуть из функции 2 значения? Нужно вернуть строку и ее длину, но чтобы функция SendData() не вызывалась 2 раза. Сейчас узнаю длину...

26
HighPredator
5544 / 1857 / 346
Регистрация: 10.12.2010
Сообщений: 5,479
Записей в блоге: 2
15.04.2012, 15:58 #2
Цитата Сообщение от Arcor Посмотреть сообщение
передать двумерный массив через функцию обратно
В смысле вернуть из функции или как?
0
silent_1991
Эксперт С++
4986 / 3043 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
15.04.2012, 16:21 #3
Arcor, все изменения с массивом-параметром будут отражены на реальном массиве, который был передан в функцию в качестве аргумента.
0
Arcor
4799 / 1800 / 159
Регистрация: 20.11.2009
Сообщений: 5,696
Записей в блоге: 1
15.04.2012, 16:54  [ТС] #4
мне return'ом нужно

чтобы я мог забрать результат из функции

скажем у нас массив 10 х 10 и заполненный "таблицей умножения"

забрать, скажем в переменную целочисленную х

C++
1
x = MyArray()[5][3]; // функция возвращающая двумерный массив
чтобы в х вернулось значение из функции лежащее под этими индексами

как-то так

как параметром вернуть я знаю, а как результатом функции не знаю

Добавлено через 4 минуты
Цитата Сообщение от HighPredator Посмотреть сообщение
В смысле вернуть из функции или как?
HighPredator, по дельфийски вот так
Delphi
1
2
3
4
5
6
7
8
9
10
11
type Arr = Array[1..10, 1..10] of Integer;
 
function f: Arr;
begin
 
end;
 
var x: Integer;
begin
x := f[5][3];
end.
0
silent_1991
Эксперт С++
4986 / 3043 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
15.04.2012, 17:07 #5
Arcor, вернуть массив не получится. Можно вернуть обёртку - std::vector (динамический массив), std::array (обёртка над статическим массивом) (стандарт C++0x).
1
Arcor
4799 / 1800 / 159
Регистрация: 20.11.2009
Сообщений: 5,696
Записей в блоге: 1
15.04.2012, 17:14  [ТС] #6
вот я тоже вектором сейчас тыкался тыкался, одномерный массив получилось забацать, а двумерный как, логики не хватает я просто не совсем силен в с++, вернее вообще бессилен
0
silent_1991
Эксперт С++
4986 / 3043 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
15.04.2012, 17:15 #7
Двумерный вектор - std::vector<std::vector<type> >.
1
Arcor
4799 / 1800 / 159
Регистрация: 20.11.2009
Сообщений: 5,696
Записей в блоге: 1
15.04.2012, 17:18  [ТС] #8
от спасибо, я немного по другому пробовал записать

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

Я не поверил этому сказанию, а как оно на самом деле? Выгодно или нет скажем для работы с матрицей 20 000 х 20 000 ?
естественно используя несколько потоков для обработки, ибо это очень большая величина для обработки
0
Bers
Заблокирован
15.04.2012, 17:22 #9
Пример-иллюстрация того, как на с++ можно передавать массив по ссылке в функцию, и возвращать его наружу.
C++
1
2
3
4
5
6
    template<class T, size_t N>
    T (&Func(  T (&arr)[N] )   )[N]
    {
        //здесь делаем с массивом все, что захотим
        return arr; 
    }
1
silent_1991
Эксперт С++
4986 / 3043 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
15.04.2012, 17:24 #10
Arcor, замедляется в несколько раз по сравнению с чем? Если со статическим массивом, и при этом не зарезервировать сразу всю нужную память, а выделять её инкрементно - замедляется, потому что освобождение и выделение памяти, а также копирование - дорогая операция. Если выделить всю нужную память сразу - то разницы не будет. Другой вопрос, что на стеке не удастся выделить много памяти, в отличие от кучи.
1
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
15.04.2012, 17:29 #11
Цитата Сообщение от silent_1991 Посмотреть сообщение
Arcor, вернуть массив не получится. Можно вернуть обёртку - std::vector (динамический массив), std::array (обёртка над статическим массивом) (стандарт C++0x).
Я наверное что-то не понимаю... Но указатель же можно вернуть.
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
#include <iostream>
 
int ** create_array(int rows,int cols)
{
 int ** a=new int*[rows];
 for (int i=0;i<rows;i++)
  {
   a[i]=new int[cols];
   for (int j=0;j<cols;j++)
    a[i][j]=rand()%100;
  }
 return a;
}
 
int main()
{
 int **array=create_array(5,5);
 using namespace std;
 for (int i=0;i<5;i++)
  {
   for (int j=0;j<5;j++)
    cout<<array[i][j]<<" ";
   delete [] array[i];
   cout<<endl;
  }
 delete [] array;
 system("pause");
 return 0;
}
0
silent_1991
Эксперт С++
4986 / 3043 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
15.04.2012, 17:30 #12
Nekto, указатель - не массив. Вы можете вернуть полноценный массив из функции, самостоятельный, автономный массив?
1
Arcor
4799 / 1800 / 159
Регистрация: 20.11.2009
Сообщений: 5,696
Записей в блоге: 1
15.04.2012, 17:30  [ТС] #13
Цитата Сообщение от silent_1991 Посмотреть сообщение
Arcor, замедляется в несколько раз по сравнению с чем?
ммм, не правильно выразился, имел ввиду что работа очень медленная
Цитата Сообщение от silent_1991 Посмотреть сообщение
не зарезервировать сразу всю нужную память, а выделять её инкрементно - замедляется, потому что освобождение и выделение памяти, а также копирование - дорогая операция
ну это то понятно


сейчас уговорю товарища, использовать вектор для передачи матрицы А то он навыдумывает сейчас...

всем спасибо
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
15.04.2012, 17:31 #14
Цитата Сообщение от silent_1991 Посмотреть сообщение
Nekto, указатель - не массив. Вы можете вернуть полноценный массив из функции, самостоятельный, автономный массив?
А в данном случае он неполноценный?
0
silent_1991
Эксперт С++
4986 / 3043 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
15.04.2012, 17:33 #15
Nekto, в данном случае выделение и освобождение памяти разнесены логически, что считается не очень хорошим тоном. И да, это не массив, это указатель на область памяти. Пускай мы и обращаемся с ним как с массивом.
1
15.04.2012, 17:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2012, 17:33
Привет! Вот еще темы с ответами:

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

Вернуть значение из функции - C++
Приветсвую программисты! Такая проблема, надо возвратить m из функции, а оно возвращает не то что надо вообще 2 ошибки: вот основной...

Вернуть строку из функции. - C++
Как вернуть строку(AnsiString) из функции? int MyTXT (AnsiString Temlate, AnsiString tmp) { TSearchRec SR; int ires; ...

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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