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

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

Войти
Регистрация
Восстановить пароль
 
Kiddeness
0 / 0 / 0
Регистрация: 14.06.2014
Сообщений: 2
#1

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

14.06.2014, 03:05. Просмотров 329. Ответов 9
Метки нет (Все метки)

Добрый вечер, уважаемые форумчане!

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

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

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

Auto как аргумент функции - C++
Возможно ли объявить параметр функции как auto? void func(auto pt); //...

Класс как аргумент функции - C++
Доброго времени суток:) Набрёл на такой пример в openGL и не могу понять как он робит, подскажите. Вот описание ф-ции: void...

Хранение объектов - что оптимальнее? - C++
Доброго времени суток, товарищи. Пишу простенькую РПГ. Имеется карта тайлов - массив вида map. На уровне также есть ≈25 персонажей и ≈50...

Функция как аргумент другой функции - C++
Добрый вечер, уважаемые. Собственно, пытаюсь функцию запихнуть в аргументы другой функции. На подобии маткадовского root(f(x),x,a,b)....

Указатель массива как аргумент функции - C++
Я прочитал несколько алгоритмов сортировки массивов, но не совсем понял, если массив чисел будет передан в аргумент функции через...

Как сделать ввод в аргумент(ы) функции? - C++
Не понятно посмотрите код)#include<iostream> #include<time.h> using namespace std; template <typename T> T midle (T max){ //KOD ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RaiaNKnight
96 / 70 / 7
Регистрация: 29.06.2011
Сообщений: 465
Записей в блоге: 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
Эксперт PHP
2172 / 1836 / 681
Регистрация: 24.04.2014
Сообщений: 5,337
14.06.2014, 10:44     Что оптимальнее: передавать матрицу как аргумент, или же формировать её внутри функции? #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от tehnar5 Посмотреть сообщение
в таком случае не будет тратиться время и память на копирование.
при передачи в функцию массив никогда не будет копироваться, передаются указатель на первый элемент
Kiddeness, так что передавай массив и размерность матрицы
Kiddeness
0 / 0 / 0
Регистрация: 14.06.2014
Сообщений: 2
14.06.2014, 14:25  [ТС]     Что оптимальнее: передавать матрицу как аргумент, или же формировать её внутри функции? #5
Большое спасибо за ответы! С:
Renji
1823 / 1241 / 288
Регистрация: 05.06.2014
Сообщений: 3,550
14.06.2014, 15:31     Что оптимальнее: передавать матрицу как аргумент, или же формировать её внутри функции? #6
при передачи в функцию массив никогда не будет копироваться, передаются указатель на первый элемент
Скопируется, куда он денется. Главное, в заголовке функции указать именно массив (со всеми размерностями), а не "указатель на первый элемент".
Jewbacabra
Эксперт PHP
2172 / 1836 / 681
Регистрация: 24.04.2014
Сообщений: 5,337
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
1823 / 1241 / 288
Регистрация: 05.06.2014
Сообщений: 3,550
14.06.2014, 16:04     Что оптимальнее: передавать матрицу как аргумент, или же формировать её внутри функции? #8
Хм, действительно, мой косяк.
Jewbacabra
Эксперт PHP
2172 / 1836 / 681
Регистрация: 24.04.2014
Сообщений: 5,337
14.06.2014, 16:06     Что оптимальнее: передавать матрицу как аргумент, или же формировать её внутри функции? #9
можно конечно "заставить" копировать массив, если он является элементом класса, и в конструктор копирования реализовать копирование массива, но тут в функцию уже передается все-таки не массив, а объект некоторого класса
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2014, 17:27     Что оптимальнее: передавать матрицу как аргумент, или же формировать её внутри функции?
Еще ссылки по теме:

std::setw() как аргумент функции - C++
void print(const int format = 0) const { for (size_t i = 0; i&lt;m_rows; ++i) { for (size_t j = 0;...

Абстрактный класс, как аргумент функции - C++
добрый день. есть базовый класс Tag внем строковое поле Name есть производные от него класы SmplTag со строковым полем Value и класс...

Произвольный объект как аргумент функции - C++
Здравствуйте! Подскажите, пожалуйста, можно ли функции передавать произвольный объект? В Java есть такая конструкция: public...

Указатель на функцию с аргументами, как аргумент другой функции - C++
У меня есть некая функция, которая принимает как аргумент другую функцию typedef void(*func_type)(); start(func_type...

Передача потока (текущ.позиции курсора в файле) как аргумент функции - C++
Всем привет! Столкнулся с такой проблемой, Конструкция довольно тяжелая для меня. Мне нужно чтобы я открывал файл для чтения, затем...


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

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

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