gpt4 book ai didi

c++ - std::vector 和内存分配

转载 作者:可可西里 更新时间:2023-11-01 18:36:52 27 4
gpt4 key购买 nike

似乎每次将新元素附加到 std::vector 时,如果没有空元素,分配的元素数量就会加倍(至少在 GCC 4.9 中是这样)。我认为这样做是为了实现摊销常数时间复杂度。

例如,运行这段代码后:

v.push_back (1);
v.push_back (2);
v.push_back (3);
v.push_back (4);
v.push_back (5);

v.shrink_to_fit(); // capacity is 5 now
v.push_back (6);

std::cout << v.capacity () << std::endl;

输出为10。

在内存受限的系统中,是否有任何方法可以防止这种行为,即使它是以性能损失为代价的?

此外,是否可以指示它应该只分配固定数量的元素而不是加倍?

我知道我可以在添加新元素之前调用 std::vector::reserve(),但在我的情况下它看起来很乱...调用 std::vector::shrink_to_fit() 是另一种方法,但也不方便。

最佳答案

没有办法。

你唯一的选择是编写你自己的 vector 数据结构,这样你就可以用它做任何你想做的事情(或者你可以只复制 internet/c++ 库的一个实现并改变你需要的东西并将新的 vector 包含在你的程序)。

其实你也可以使用数组和realloc命令。

关于c++ - std::vector 和内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25731466/

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