小编Jra*_*xon的帖子

push_back/emplace_back将对象的浅表副本复制到另一个向量中

说我有以下代码

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]);

}
Run Code Online (Sandbox Code Playgroud)

现在我相信这是一个深刻的副本collection1[0].我尝试过使用collection2.emplace_back(move(collection1[0])),但随后数据字段collection1[0]将消失.我只想让这个"黑色福特"存在于两个向量中,并且通过任一向量对这个特定对象所做的更改将反映在两个向量上.

我猜测对于真实对象的向量,此向量的元素占用实际内存.因此,元素collection1必须独立于任何元素collection2.我认为最简单的方法是让collection1collection2成为指针的向量并指向相同的向量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
Run Code Online (Sandbox Code Playgroud)

c++ python vector

11
推荐指数
2
解决办法
1424
查看次数

标签 统计

c++ ×1

python ×1

vector ×1