#c #pass-by-reference #pass-by-value
#c #передача по ссылке #передача по значению
Вопрос:
void fun(vector<int>vec)
{
some code
}
int main()
{
int n = 5;
vector<int>avec(n);
fun(avec);
}
Какова временная сложность передачи вектора размера n
другой функции путем передачи по значению и передачи по ссылке?
Какова временная сложность этого кода, передающего вектор только один раз?
Комментарии:
1. Знаете ли вы разницу между передачей по значению и передачей по ссылке?
2. Каково ваше понимание этой сложности? Есть предположения?
3. чтобы скопировать n элементов, вам нужно скопировать n элементов. Обратите внимание, что имеет смысл говорить о сложности в зависимости от n только тогда, когда n действительно может расти. Копирование вектора размером 5 один раз представляет постоянную сложность 😉
Ответ №1:
Передача std::vector
размера N
функции по значению, очевидно, имеет линейную сложность O(n)
, поскольку она включает копирование N
объектов. Передача по ссылке имеет сложность O(1)
, поскольку фактически функции передается только адрес объекта std::vector
, независимо от его размера.
Стоит отметить, что ситуация отличается с возвратом a std::vector
из функции, в этом случае возврат по значению имеет сложность O(1)
, поскольку в этом случае компилятор либо использует copy elision
, если это разрешено, либо конструктор перемещения. Оба O(1)
имеют сложность.