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

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

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

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

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

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

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

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

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

Наследование vs Композиция vs Агрегация: что лучше выбрать? Как лучше передавать объекты в функции? - C++
Добрый день!! Дело вот в чём, я хочу создать класс, внутри которого будут созданы объекты других классов (реализованных в некоторой...

Передавать при создании класса, переменную - аргумент функции - C++ Qt
1. Вопрос Конструктор класса - метод: CustomGLWidget::CustomGLWidget(QWidget *parent):QGLWidget(parent) { //Initialize...

Что лучше передавать из функции в функцию — массив переменных или переменные по одной? - C (СИ)
Что лучше передавать из функции в функцию - массив переменных или переменные по одной?

Что оптимальнее - LINQ или циклы - LINQ
При работе с коллекциями довольно часто возникает необходимость выбрать элементы по некоторым признакам или по считать какое-то на...

PostDelayed можно ли в Runnable передавать аргумент, как-то так? - Программирование Android
Добрый день, форумчане гуру и прочие знающие люди! Помогите начинающему программеру! Есть метод .postDelayed который замечательно...

9
RaiaNKnight
96 / 70 / 7
Регистрация: 29.06.2011
Сообщений: 465
Записей в блоге: 1
14.06.2014, 09:22 #2
У вас ~ 4*10^4 элементов. Так что ощутимой разницы не заметите. Кроме этого, у вас элементы матрицы - это просто числа.
1
tehnar5
31 / 31 / 12
Регистрация: 03.05.2011
Сообщений: 84
14.06.2014, 10:09 #3
В данном случае разницы нет, но, если матрица не меняется, то можно ее передать как
const matrix &mymatrix, в таком случае не будет тратиться время и память на копирование.
1
Jewbacabra
Эксперт PHP
2702 / 2290 / 854
Регистрация: 24.04.2014
Сообщений: 6,885
14.06.2014, 10:44 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от tehnar5 Посмотреть сообщение
в таком случае не будет тратиться время и память на копирование.
при передачи в функцию массив никогда не будет копироваться, передаются указатель на первый элемент
Kiddeness, так что передавай массив и размерность матрицы
1
Kiddeness
0 / 0 / 0
Регистрация: 14.06.2014
Сообщений: 2
14.06.2014, 14:25  [ТС] #5
Большое спасибо за ответы! С:
0
Renji
2017 / 1385 / 312
Регистрация: 05.06.2014
Сообщений: 3,953
14.06.2014, 15:31 #6
при передачи в функцию массив никогда не будет копироваться, передаются указатель на первый элемент
Скопируется, куда он денется. Главное, в заголовке функции указать именно массив (со всеми размерностями), а не "указатель на первый элемент".
0
Jewbacabra
Эксперт PHP
2702 / 2290 / 854
Регистрация: 24.04.2014
Сообщений: 6,885
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);
}
0
Renji
2017 / 1385 / 312
Регистрация: 05.06.2014
Сообщений: 3,953
14.06.2014, 16:04 #8
Хм, действительно, мой косяк.
0
Jewbacabra
Эксперт PHP
2702 / 2290 / 854
Регистрация: 24.04.2014
Сообщений: 6,885
14.06.2014, 16:06 #9
можно конечно "заставить" копировать массив, если он является элементом класса, и в конструктор копирования реализовать копирование массива, но тут в функцию уже передается все-таки не массив, а объект некоторого класса
0
Убежденный
Ушел с форума
Эксперт С++
15708 / 7219 / 1139
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
14.06.2014, 17:27 #10
Цитата Сообщение от Kiddeness Посмотреть сообщение
что оптимальнее, передавать массив (матрица 5 столбцов на ~8000 строк элементов, все ячейки пустые, кроме первой строки) в функцию как аргумент, или же экономнее будет передать как аргумент массив из 4х известных мне элементов, а саму матрицу формировать уже внутри функции?
Оптимальнее будет не гадать, а проверить каким-нибудь профайлером,
который даст точный ответ.
0
14.06.2014, 17:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2014, 17:27
Привет! Вот еще темы с ответами:

Что по скорости оптимальнее ArrayList или List<T> - C#
Собственно вопрос в названии темы. Ну и также интересует также, что оптимальнее - коллекция по ключу из пространства System.Collections или...

А что находится внутри функции MessageBox или как еще можно создать MessageBox? - Assembler
Помните сказку о лягушке-царевне? Что необходимо было сделать, чтобы убить Кащея-бессмертного? ― нужно было сперва с кучей приключений...

Форма с progressbar: Что оптимальнее - поток или backgroundWorker - C#
Добрый всем день. Есть класс, который выполняет некую работу: public class MyNew : IMyNew { private bool...

Как оптимальнее представить матрицу на форме - C#
Здравствуйте дорогие форумчане! Начинаю изучение C#. Поставил себе задачу написать программу, которая складывает матрицы. Причем...


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

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

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