Скажем, у меня есть следующий код
class Car {
public:
string color;
string name;
Car(string c, string n): color(c), name(n){}
}
int main() {
vector<Car> collection1;
vector<Car> collection2;
collection1.emplace_back("black", "Ford");
collection1.emplace_back("white", "BMW");
collection1.emplace_back("yellow", "Audi");
//Question comes here
collection2.push_back(collection1[0]);
}
Теперь я считаю, что это делает глубокую копию collection1[0]
.
Я попытался использовать collection2.emplace_back(move(collection1[0]))
, но тогда поля данных collection1[0]
исчезнут. Я просто хочу, чтобы этот "черный Форд" существовал в обоих векторах, и изменения, внесенные в этот конкретный объект через любой вектор, отражались бы на обоих векторах.
Я предполагаю, что для вектора реальных объектов элементы этого вектора принимают фактическую память. Поэтому элемент collection1
должен быть независимым от любого элемента collection2
. Я думаю, что самый простой способ - позволить collection1
и collection2
быть векторами указателей и указывать на один и тот же вектор Car
. Но есть ли какие-либо возможные способы сделать работу над этим кодом без использования вектора указателей. В конечном итоге я хочу вернуть обе эти коллекции обратно к предыдущей функции, поэтому создание векторов указателей бессмысленно.
Короче говоря, я хочу имитировать метод List.append()
в python.
collection1 = [Car("black", "Ford"),Car("white", "BMW"),Car("yellow", "Audi")]
collection2 = []
collection2.append(collection1[0])
collection2[0].color = "blue" // This affects collection1 as well