推动矢量矢量

mpe*_*pen 3 c++ stl vector

推回矢量矢量有什么问题吗?喜欢

typedef vector<Point> Polygon;
vector<Polygon> polys;
polys.push_back(some_poly);
Run Code Online (Sandbox Code Playgroud)

some_poly中的所有元素都会被复制好吗?

我的代码中有一个错误,我似乎无法弄清楚它有什么问题.

Joh*_*itb 6

对,矢量按预期复制.有一个很好的软件geordi可以显示:

{ 
    using namespace tracked; 
    typedef vector<B> poly_t; 
    poly_t poly(3); // contains 3 B's
    vector<poly_t> v; 
    v.push_back(poly); 
}
Run Code Online (Sandbox Code Playgroud)

它跟踪创建/复制tracked::B.这是输出:

B0* B1*(B0) B2*(B0) B3*(B0) B0~ B4*(B1) B5*(B2) B6*(B3) B4~ B5~ B6~ B1~ B2~ B3~
Run Code Online (Sandbox Code Playgroud)

当我们只跟踪时输出v.push_back:

B4*(B1) B5*(B2) B6*(B3)
Run Code Online (Sandbox Code Playgroud)

如您所见,首先将B0创建为向量构造函数的默认参数.然后将该对象复制到3个B中,然后在构造函数返回时再次销毁B0.poly然后被创建.然后,我们将它推回到多边形向量中.参数poly被复制到一个新的向量中,该向量在多边形向量中创建并由其管理.

如果崩溃,问题可能在于程序的另一部分.检查复制构造函数/构造函数和析构函数是否正常工作,如果使用动态内存分配,则不会删除两次.