【发布时间】:2011-04-15 19:43:44
【问题描述】:
我正在处理的一个问题涉及一个大型树结构。最初,我通过newing 新节点创建树并将它们附加到它们的父节点等。这花了很长时间。一位朋友建议我放弃动态内存分配并将树构造为带有子单词偏移量的数组。我以前没有这样做过,所以我对实际发生的情况有一些疑问。
这是一个超基本的,没有任何安全检查的例子:
struct DataStructure
{
std::vector<Entry> mCollection;
};
struct Entry
{
char mValue;
std::vector<unsigned int> mOffsetCollection; //a vector of indexes that are offsets to other entries.
};
我很好奇当我向这个结构中添加更多数据时会发生什么。如果我添加了
DataStructure d;
Entry entry;
entry.mValue = 'a';
d.push_back(entry);
.
.
.//add some more entries...
.
.
//now suppose I add a bunch of offsets to these various entries in my array.
Entry& firstEntry = d.at(0);
firstEntry.mOffsetCollection.push_back(4);
firstEntry.mOffsetCollection.push_back(9);
firstEntry.mOffsetCollection.push_back(32);
..
所以第一个条目的大小正在增加。究竟会发生什么?我刚刚浏览了一个小例子,它似乎工作正常。数据结构中的其他条目不受影响。我最初担心,如果结构的大小变大,它可能会进入数组中的下一个项目,但我想这不会发生。这让我意识到我真的不知道幕后发生了什么。 DataStructure d 中的vector<Entry> 是否需要重新分配内存?
【问题讨论】:
-
“结构的大小变大了,它会碰到数组中的下一项”...什么数组?你有一个向量对象,而不是一个数组。