gpt4 book ai didi

c++ - std::vector 预分配(大小和容量 n + 2)

转载 作者:行者123 更新时间:2023-11-30 01:49:03 25 4
gpt4 key购买 nike

我的用例如下:从二进制文件中读取的大小为 n 的 vector 。

在其他变体中(iostreams,在我的例子中是执行解压的自定义代码),我可以用这样的语义做一些事情:

vector<myElem> v;
v.resize(n); // from my understanding v now has size n and capacity n
fread(v.data(), sizeof(myElem), n, myFile);

但是,稍后我将不得不(反复)向这样的 vector 添加和删除两个元素。 (虽然这听起来很愚蠢,但将标记值添加到列表中可以产生积极的效果,这样排序列表的交集就不必为边界检查添加比较)。

为此,我很乐意预先分配一个大小为 n 和容量为 n + 2 的 vector 。我想我可以做类似的事情:

vector<myElem> v;
v.resize(n + 2); // from my understanding v now has size n + 2 and capacity n + 2
v.pop_back();
v.pop_back(); // v now has size n and most probably still has capacity 2 (unless n is pretty small)
fread(v.data(), sizeof(myElem), n, myFile);

显然,这既不漂亮,也不保证会像我想的那样表现。在实践中,我认为对于大的 n 确实应该这样做,如果小的 n 应该发生,重新分配并不重要。

不过,很高兴听到是否有更好的方法。

编辑:

我不确定如何在我的案例中使用 reserve。如果我保留 n + 2 的容量, vector 的大小仍为 0。如果我将大小调整为 n,我也会更改容量。

如果我先调整大小然后保留,我会分配两次内存并在此过程中复制整个 vector 。

最佳答案

您可以使用v.reserve(n + 2) 来改变vector 的容量而不改变它的大小。看看 documentation更好地了解正在发生的事情。

关于c++ - std::vector 预分配(大小和容量 n + 2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29654206/

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