gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:09:12 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com