我正在处理的一个问题涉及一个大树结构。最初我是通过 new
创建树的添加新节点并将它们附加到它们的父节点等。这花了很长时间。一位 friend 建议我放弃动态内存分配并将树结构化为一个数组,其中包含子词的偏移量。我以前没有这样做过,所以我对实际发生的事情有一些疑问。
这是最基本的,没有任何安全检查的例子:
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);
..
所以第一个条目的大小在增加。到底发生了什么?我刚刚浏览了一个小例子,它似乎工作正常。数据结构中的其他条目不受影响。我最初担心,如果结构的大小变大,它可能会遇到数组中的下一个项目,但我想这不会发生。这让我意识到我真的不知道幕后发生了什么。是 vector<Entry>
在 DataStructure d
必须重新分配内存?
最佳答案
是的,std::vector
动态管理自己的内存。
结构(实际上,任何数据类型)的大小在编译时是固定的;它在运行时不受影响。
关于c++ - 当您增加 vector 中结构的大小时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5681577/