Это намного проще, чем предлагает ваша домашняя работа, но ради получения правильных оценок:
В нем говорится о том, насколько малым будет vector
, потому что КОПИРОВАНИЕ большого вектора может быть дорогостоящим (производительностьмудрый).Если ваша функция не изменит vector
, а vector
будет небольшим, тогда достаточно просто передать копию.Примером может служить функция для печати vector
:
void print(const std::vector<int> v) // const because we don't modify v
{
for (auto i : v)
std::cout << i << ", ";
}
Когда вместо этого у нас есть функция, которая должна изменить vector
(и эти изменения необходимо наблюдать после завершения функции) aссылка имеет больше смысла:
void removeDuplicates(std::vector<int>& v)
{
}
Здесь removeDuplicates
принимает неконстантную ссылку, потому что она изменяет ее.Независимо от размера vector
, мы ожидаем, что функция изменит переданный в vector
:
std::vector<int> v;
// populate v
...
removeDuplicates(v);
// v may now be different
Если вместо этого у вас есть функция, которая изменяет аргументы, но эти изменения не должныесли смотреть за пределы функции, достаточно неконстантной копии.Представьте, что наша функция print
напечатала элементы, округленные до ближайшего 100
(конечно, мы могли бы сделать это на лету, но мы могли бы сначала изменить vector
, а затем вызвать наш оригинальный print
).
Для получения реальных рекомендаций обычно следует просто передать копию, если:
* ваша функция не сохраняет ссылку на переданный параметр или
* изменяет ее, когда необходимо наблюдать изменения после завершения функции