c++ - 当您增加 vector 中结构的大小时会发生什么?

标签 c++ vector struct offset

我正在处理的一个问题涉及一个大树结构。最初我是通过 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/

相关文章:

c++ - std::vector 是否需要使用移动而不是复制?

c++ - 为什么C++中的成员类要先初始化?

c - 将数组映射到结构时的顺序相反

c# - 使用 FieldOffset 的结构意外行为

c++ - 为什么我在这段特定代码中出现段错误?

c++ - Boost with eclipse找不到线程库

c - 如何将指针传递给 C 中的 vector 扩展

c++ - vector 量化到方向码字

c++ - 非捕获 lambda 和函数指针作为重载函数歧义中的参数

c++ - 如何使用 SSE 使用条件处理整数数组