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

Что оптимальнее: передавать матрицу как аргумент, или же формировать её внутри функции? - C++

Восстановить пароль Регистрация
 
Kiddeness
0 / 0 / 0
Регистрация: 14.06.2014
Сообщений: 2
14.06.2014, 03:05     Что оптимальнее: передавать матрицу как аргумент, или же формировать её внутри функции? #1
Добрый вечер, уважаемые форумчане!

Я столкнулась с таким вопросом в процессе оптимизации моей программы: что оптимальнее, передавать массив (матрица 5 столбцов на ~8000 строк элементов, все ячейки пустые, кроме первой строки) в функцию как аргумент, или же экономнее будет передать как аргумент массив из 4х известных мне элементов, а саму матрицу формировать уже внутри функции? Будет ли вообще какая-то ощутимая разница? Для решения задачи приемлемы оба варианта.

Функция реализует алгоритм численного решения Рунге-Кутты для системы уравнений, поэтому массив элементов формируется внутри.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2014, 03:05     Что оптимальнее: передавать матрицу как аргумент, или же формировать её внутри функции?
Посмотрите здесь:

Класс как аргумент функции C++
Хранение объектов - что оптимальнее? C++
Функция как аргумент другой функции C++
C++ std::setw() как аргумент функции
C++ Произвольный объект как аргумент функции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RaiaNKnight
 Аватар для RaiaNKnight
96 / 70 / 7
Регистрация: 29.06.2011
Сообщений: 458
Записей в блоге: 1
14.06.2014, 09:22     Что оптимальнее: передавать матрицу как аргумент, или же формировать её внутри функции? #2
У вас ~ 4*10^4 элементов. Так что ощутимой разницы не заметите. Кроме этого, у вас элементы матрицы - это просто числа.
tehnar5
31 / 31 / 12
Регистрация: 03.05.2011
Сообщений: 84
14.06.2014, 10:09     Что оптимальнее: передавать матрицу как аргумент, или же формировать её внутри функции? #3
В данном случае разницы нет, но, если матрица не меняется, то можно ее передать как
const matrix &mymatrix, в таком случае не будет тратиться время и память на копирование.
Jewbacabra
1789 / 1504 / 538
Регистрация: 24.04.2014
Сообщений: 4,215
14.06.2014, 10:44     Что оптимальнее: передавать матрицу как аргумент, или же формировать её внутри функции? #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от tehnar5 Посмотреть сообщение
в таком случае не будет тратиться время и память на копирование.
при передачи в функцию массив никогда не будет копироваться, передаются указатель на первый элемент
Kiddeness, так что передавай массив и размерность матрицы
Kiddeness
0 / 0 / 0
Регистрация: 14.06.2014
Сообщений: 2
14.06.2014, 14:25  [ТС]     Что оптимальнее: передавать матрицу как аргумент, или же формировать её внутри функции? #5
Большое спасибо за ответы! С:
Renji
1534 / 982 / 240
Регистрация: 05.06.2014
Сообщений: 2,956
14.06.2014, 15:31     Что оптимальнее: передавать матрицу как аргумент, или же формировать её внутри функции? #6
при передачи в функцию массив никогда не будет копироваться, передаются указатель на первый элемент
Скопируется, куда он денется. Главное, в заголовке функции указать именно массив (со всеми размерностями), а не "указатель на первый элемент".
Jewbacabra
1789 / 1504 / 538
Регистрация: 24.04.2014
Сообщений: 4,215
14.06.2014, 15:58     Что оптимальнее: передавать матрицу как аргумент, или же формировать её внутри функции? #7
Цитата Сообщение от Renji Посмотреть сообщение
Скопируется, куда он денется.
ты плохо изучил массивы, в том то и дело что массив в функцию передается ВСЕГДА в виде указателя на первый элемент
попробуй вот такой код, и сравни адреса одного и тогоже элемента:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
void foo(int a[]) {
    cout << &a[2] << endl;
}
int main() {
    int arr[] = {1, 2, 3, 4, 5};
    cout << &arr[2] << endl;
    foo(arr);
}
Добавлено через 9 минут
Цитата Сообщение от Renji Посмотреть сообщение
в заголовке функции указать именно массив (со всеми размерностями)
но даже если так, то все равно передается указатель
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
#define N 5
void foo(int a[N]) {
    cout << &a[2] << endl;
}
int main() {
    int arr[N] = { 1, 2, 3, 4, 5 };
    cout << &arr[2] << endl;
    foo(arr);
}
Renji
1534 / 982 / 240
Регистрация: 05.06.2014
Сообщений: 2,956
14.06.2014, 16:04     Что оптимальнее: передавать матрицу как аргумент, или же формировать её внутри функции? #8
Хм, действительно, мой косяк.
Jewbacabra
1789 / 1504 / 538
Регистрация: 24.04.2014
Сообщений: 4,215
14.06.2014, 16:06     Что оптимальнее: передавать матрицу как аргумент, или же формировать её внутри функции? #9
можно конечно "заставить" копировать массив, если он является элементом класса, и в конструктор копирования реализовать копирование массива, но тут в функцию уже передается все-таки не массив, а объект некоторого класса
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2014, 17:27     Что оптимальнее: передавать матрицу как аргумент, или же формировать её внутри функции?
Еще ссылки по теме:

C++ Указатель на имя файла как аргумент функции. Как реализовать?
C++ Путь к файлу вводится в командной строке как аргумент функции main()
C++ Auto как аргумент функции

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

Или воспользуйтесь поиском по форуму:
Убежденный
Системный программист
 Аватар для Убежденный
14183 / 6198 / 984
Регистрация: 02.05.2013
Сообщений: 10,324
Завершенные тесты: 1
14.06.2014, 17:27     Что оптимальнее: передавать матрицу как аргумент, или же формировать её внутри функции? #10
Цитата Сообщение от Kiddeness Посмотреть сообщение
что оптимальнее, передавать массив (матрица 5 столбцов на ~8000 строк элементов, все ячейки пустые, кроме первой строки) в функцию как аргумент, или же экономнее будет передать как аргумент массив из 4х известных мне элементов, а саму матрицу формировать уже внутри функции?
Оптимальнее будет не гадать, а проверить каким-нибудь профайлером,
который даст точный ответ.
Yandex
Объявления
14.06.2014, 17:27     Что оптимальнее: передавать матрицу как аргумент, или же формировать её внутри функции?
Ответ Создать тему
Опции темы

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