这就是问题:
如何正确使用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
//...
}
我想知道这样做的正式方式,谢谢!!!!!!
答案 0 :(得分:3)
std :: vector就是你要找的东西,我猜......
class Tree
{
std::vector<Branch> branches;
};
答案 1 :(得分:1)
向量是通用解决方案。但是你应该在开始使用诸如向量之类的库代码之前查看内存分配 - 例如,C ++ new,calloc,malloc,线程本地内存等等......每个STL容器都有它自己的算法复杂性,研究这些将帮助你挑选正确的
讨论:
如果你想要增长的东西,而你没有足够的空间......那么你必须realloc()或算法。获取更大的内存缓冲区并将旧缓冲区复制到的正确索引偏移。这就是矢量在幕后的作用;通过使用线性函数(2x)增长(这是特定于实现的),当然矢量就是这么做的。以这种方式增长意味着它有更多的内存而不是它需要,这意味着将来添加到向量的数据不会立即重新分配。
但是,我必须补充一点,这是非常低效的,你几乎总能避免复制东西的成本。 Vector的主要用途是用于连续的内存区域,你几乎可以通过使用链接的数据结构来改进向量,也许在二叉树中用于搜索一个键:D