- Без использования каких-либо инструментов,
- как профилировщик (например, gprof ), чтобы увидеть, сколько времени и где потрачено,
- или любые другие инструменты, такие как " valgrind + cachegrind ", чтобы увидеть, сколько операций выполняется в любой из двух функций,
- А также игнорирование всех оптимизаций компилятора, т.е. компиляция с
-O0
,
- И если предположить, что еще есть в двух функциях (то, что вы представляете как
/* all required things */
), тривиально,
Тогда все, что можно сказать, просто взглянув на обе ваши функции, состоит в том, что обе ваши функции имеют сложность O(n)
, поскольку обе ваши функции проводят большую часть времени в двух циклах for
. В зависимости от того, насколько велик размер матриц, особенно если они действительно большие, все остальное в коде в значительной степени незначительно, когда речь идет о скорости вниз.
Итак, к чему сводится ваш вопрос, по-моему,
- За сколько времени это займет,
- для вызова конструктора
C
- плюс возврат этого
C
,
по сравнению с
- Сколько времени это займет,
- для вызова функции
resize
для C
,
- плюс вызов конструктора копирования
C
.
Это можно «грубо, но относительно быстро» измерить, используя std::clock()
или chrono
, как показано здесь в нескольких ответах.
#include <chrono>
auto t_start = std::chrono::high_resolution_clock::now();
matrix D = A+B; // To compare replace on 2nd run with this ---> matrix D; Add(A,B,D);
auto t_end = std::chrono::high_resolution_clock::now();
double elaspedTimeMs = std::chrono::duration<double, std::milli>(t_end-t_start).count();
Хотя еще раз, по моему честному мнению, если ваши матрицы большие, большую часть времени будет идти в цикле for
.
p.s. Преждевременная оптимизация - корень всего зла.