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

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

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

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

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

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

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

заранее спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт С++
4952 / 3028 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
15.04.2012, 17:50     Вернуть матрицу из функции #21
Arcor, ну вам нужно push_back'ать вектор целиком. Но раз вам известны размеры матрицы, почему бы сразу не создать её целиком и не применять оператор []?
Bers
Заблокирован
15.04.2012, 17:54     Вернуть матрицу из функции #22
Цитата Сообщение от Nekto Посмотреть сообщение
Вы сейчас ломаете мой взгляд на массивы... Почему память, выделенная с помощью new, к которой можно обращаться через индекс, не считается массивом?
Потому что "массив" - это синтаксическая конструкция языка. При помощи которой, вы можете создавать различные типы данных.

Например: int a[10] и int b[20] - это два принципиально разных типа данных.
Так же, эти два принципиально разных типа данных принципиально отличаются от типа данных "указатель".

Соответственно, правомерно сделать проверку типов. Функция может принимать только массив из 10 элементов, и браковать на стадии компиляции все прочие массивы, в том числе - сырые указатели.

Что касается адреса памяти - это всего лишь адрес. "Массив" на языке с++ не является "адресом памяти".
Arcor
4785 / 1786 / 155
Регистрация: 20.11.2009
Сообщений: 5,653
Записей в блоге: 1
15.04.2012, 18:07  [ТС]     Вернуть матрицу из функции #23
Цитата Сообщение от silent_1991 Посмотреть сообщение
Arcor, ну вам нужно push_back'ать вектор целиком. Но раз вам известны размеры матрицы, почему бы сразу не создать её целиком и не применять оператор []?
ну так мне ее сперва заполнить нужно программно, скажем таким методом я буду считывать все из файла в массив, а в другой функции буду уже забирать из этой функции переделанные и обработанные значения. Поэтому и нужно было что-то независимое, и с которого можно было бы забирать результат
Bers
Заблокирован
15.04.2012, 18:08     Вернуть матрицу из функции #24
Цитата Сообщение от silent_1991 Посмотреть сообщение
Мы всё равно не сможем упаковать что-то в массив внутри функции и вернуть именно массив как самостоятельный объект.
Ну это максимум, что можно сделать с обычным массивом.
Нельзя из функции вернуть массив по значению.

C++
1
2
// : error C2090: функция возвращает массив
int (Test1(  int (arr)[10] )   )[10]       {  return arr; }
С чем связанно данное ограничение, лично мне не понятно. С другой стороны, на практике я ни разу не сталкивался с ситуацией, когда очень надо было бы вернуть массив по значению.
silent_1991
Эксперт С++
4952 / 3028 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
15.04.2012, 18:10     Вернуть матрицу из функции #25
Arcor, создаём объект:
C++
1
std::vector<std::vector<type> > matrix(size1, std::vector<type>(size2));
После этого с ним можно работать как с массивом, созданным так:
C++
1
type matrix[size1][size2];
Добавлено через 1 минуту
Цитата Сообщение от Bers Посмотреть сообщение
Нельзя из функции вернуть массив по значению.
Вот в этом и заключалось моё начальное "вернуть полноценный, автономный массив" .
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
15.04.2012, 18:11     Вернуть матрицу из функции #26
Цитата Сообщение от silent_1991 Посмотреть сообщение
Nekto, тут смотря как посмотреть. Можно назвать массивом байт объект любого типа, int, double и т.д.
Ну вот, например, "Уничтожение массива delete[] pointer"(Бьерн Страуструп). Называется именно уничтожение массива. И, раз его можно применить к указателю, то это можно назвать массивом. ИМХО.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2012, 18:16     Вернуть матрицу из функции
Еще ссылки по теме:

C++ Вернуть значение из функции
C++ Вернуть из функции 2 значения
C++ Вернуть двумерный массив из функции
Вернуть массив из функции C++
Считать матрицу из файла, транспонировать и вернуть в другой файл C++

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт С++
4952 / 3028 / 149
Регистрация: 11.11.2009
Сообщений: 7,026
Завершенные тесты: 1
15.04.2012, 18:16     Вернуть матрицу из функции #27
Nekto, всё дело в уровне абстракции. Раз мы работаем с указателем, под который выделена память, как с массивом, то и думаем про него как про массив. Однако фактически это не массив (массив ячеек памяти - да, но не массив на уровне языка).

Добавлено через 3 минуты

Не по теме:

Пардон, не "под который выделена память", а "который указывает на выделенную памяти". Под указатель память выделяется при создании.

Yandex
Объявления
15.04.2012, 18:16     Вернуть матрицу из функции
Ответ Создать тему
Опции темы

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