如何动态添加对象

时间:2009-12-22 15:20:55

标签: c++ object vector

这就是问题:

如何正确使用IT? IT =动态添加对象(意味着创建类结构以支持它)

class Branch   
{  
    Leaves lv;         //it should have many leaves!!  
}  

class Tree   
{  
    Branch br;         //it should have many branchs!!!   
}

现在是一个非工作示例(既不是c ++ !!,但我试图提出这个想法)

class Branch  
{  
   static lv_count;  

   Leaves lv; //it should have many leaves!!   (and should be some pointer)

   public:  
   add(Leave lv)  
   {  
       lv[lv_count] = lv;  
       lv_count ++ ;  
   }  
}  

class Tree  
{  
   static br_count;

   Branch br; //it should have many branchs!!! (and should be some pointer)

   Tree
   public:
   add(Branch br)
   {
       br[br_count] = lv;
       br_count ++ ;
   }

}
例如,这是一种愚蠢的方法:

class Branch
{
   static count;
   Leaves l[1000]; //mmm i don't like this
   //...
}

class Tree
{
   static count;
   Branch b[1000]; //mmm i don't like this
   //...
}

我想知道这样做的正式方式,谢谢!!!!!!

2 个答案:

答案 0 :(得分:3)

std :: vector就是你要找的东西,我猜......

class Tree
{
   std::vector<Branch> branches;
};

答案 1 :(得分:1)

向量是通用解决方案。但是你应该在开始使用诸如向量之类的库代码之前查看内存分配 - 例如,C ++ new,calloc,malloc,线程本地内存等等......每个STL容器都有它自己的算法复杂性,研究这些将帮助你挑选正确的

讨论:

如果你想要增长的东西,而你没有足够的空间......那么你必须realloc()或算法。获取更大的内存缓冲区并将旧缓冲区复制到的正确索引偏移。这就是矢量在幕后的作用;通过使用线性函数(2x)增长(这是特定于实现的),当然矢量就是这么做的。以这种方式增长意味着它有更多的内存而不是它需要,这意味着将来添加到向量的数据不会立即重新分配。

但是,我必须补充一点,这是非常低效的,你几乎总能避免复制东西的成本。 Vector的主要用途是用于连续的内存区域,你几乎可以通过使用链接的数据结构来改进向量,也许在二叉树中用于搜索一个键:D