Подтвердить что ты не робот

Передача векторов по ссылке

Если у меня есть вектор объектов в одном классе, который я хочу изменить в другом, я бы попытался передать всю информацию по ссылке.

Что именно мне нужно передать по ссылке? Вектор? Объекты? Оба?

По сути, я спрашиваю: в чем разница между ними?

vector&<object> blah; // A reference to a vector of objects?

vector<object&> blah; // A vector of references to objects?

vector&<object&> blah; // A reference to a vector of references to objects???

На самом деле я не уверен, как работает работа с массивами вроде контейнеров. Являются ли они законными?

4b9b3361

Ответ 1

vector&<object> является синтаксической ошибкой. vector<object&> недействителен, так как тип векторного значения должен быть назначен. vector&<object&> blah является синтаксической ошибкой.

Ссылка на вектор vector<T>&.

Ответ 2

У вас не может быть вектор ссылок. Векторные элементы должны быть скопируемыми и присваиваемыми, а ссылки - нет. Таким образом, только первая опция на самом деле является опцией, но она написала std::vector<Object> &.

Обратите внимание, что v[1] уже возвращает ссылку на второй элемент, поэтому вы можете с радостью передать отдельные элементы по ссылке.

Возможно, существует вектор ссылочных оберток a la std::ref, но если вы не знаете, что это такое, вы, вероятно, не должны его использовать в этой точке.

Ответ 3

Другой вариант - обойти итераторы вместо контейнеров. Это подход, который стандартная библиотека использует в <algorithm>. Они немного более многословны на вызывающем сайте, но у них есть то преимущество, что они работают для частей коллекции, а также для завершения коллекций и отсоединения алгоритма от контейнера.

Наконец, конечно, стоит проверить, знаете ли вы свои алгоритмы, поскольку, возможно, уже есть тот, который делает то, что вы хотите.