gpt4 book ai didi

c++ - 在 std::vector.reserve() 之后在 std::vector 中重新分配

转载 作者:太空宇宙 更新时间:2023-11-04 14:56:33 26 4
gpt4 key购买 nike

我有一段代码,我首先将一些值放入 std::vector 中,然后将每个值的地址提供给将使用它们的对象之一,例如这个:

std::vector < useSomeObject > uso;

// uso is filled

std::vector < someObject > obj;

for (int i=0; i < numberOfDesiredObjects; ++i){
obj.push_back(someObject());
obj.back().fillWithData();
}
for (int i=0; i < numberOfDesiredObjects; ++i){
uso[i].setSomeObject(&obj[i]);
}

// use objects via uso vector
// deallocate everything

现在,由于我有时有点风格怪胎,我认为这丑陋并且只想使用 1 个 for 循环,有点像这样:

for (int i=0; i < numberOfDesiredObjects; ++i){
obj.push_back(someObject());
obj.back().fillWithData();
uso[i].setSomeObject(&obj.back());
}

当然,我不能那样做,因为偶尔会发生重新分配,我设置的所有指针都失效了。

所以,我的问题是:我知道 std::vector.reserve() 是您知道需要多少内存并想提前分配内存的方法。如果我确定我正在尝试使用 reserve() 提前分配足够的内存,这是否保证我的指针将保持有效?

谢谢。


旁注。 This是一个类似的问题,但没有我想知道的答案。只是为了防止它作为对此问题的第一条评论弹出。

最佳答案

事实上,这是使用reserve 的主要原因之一。你保证附加到 std::vector 的末尾不会使 vector 中元素的迭代器、引用或指针无效只要 vector 的新大小不超过旧容量。

关于c++ - 在 std::vector.reserve() 之后在 std::vector 中重新分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10735135/

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