Ответ 1
vector&<object>
является синтаксической ошибкой. vector<object&>
недействителен, так как тип векторного значения должен быть назначен. vector&<object&> blah
является синтаксической ошибкой.
Ссылка на вектор vector<T>&
.
Если у меня есть вектор объектов в одном классе, который я хочу изменить в другом, я бы попытался передать всю информацию по ссылке.
Что именно мне нужно передать по ссылке? Вектор? Объекты? Оба?
По сути, я спрашиваю: в чем разница между ними?
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???
На самом деле я не уверен, как работает работа с массивами вроде контейнеров. Являются ли они законными?
vector&<object>
является синтаксической ошибкой. vector<object&>
недействителен, так как тип векторного значения должен быть назначен. vector&<object&> blah
является синтаксической ошибкой.
Ссылка на вектор vector<T>&
.
У вас не может быть вектор ссылок. Векторные элементы должны быть скопируемыми и присваиваемыми, а ссылки - нет. Таким образом, только первая опция на самом деле является опцией, но она написала std::vector<Object> &
.
Обратите внимание, что v[1]
уже возвращает ссылку на второй элемент, поэтому вы можете с радостью передать отдельные элементы по ссылке.
Возможно, существует вектор ссылочных оберток a la std::ref
, но если вы не знаете, что это такое, вы, вероятно, не должны его использовать в этой точке.
Другой вариант - обойти итераторы вместо контейнеров. Это подход, который стандартная библиотека использует в <algorithm>
. Они немного более многословны на вызывающем сайте, но у них есть то преимущество, что они работают для частей коллекции, а также для завершения коллекций и отсоединения алгоритма от контейнера.
Наконец, конечно, стоит проверить, знаете ли вы свои алгоритмы, поскольку, возможно, уже есть тот, который делает то, что вы хотите.