- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据下面的测试,似乎是一个std::vector<int>
以这种方式增加其容量:
它发生在我们 push_back()
并且容量已经满了(即v.size() == v.capacity()
),需要注意的是之前一点点都不会发生
容量增加到之前容量的1.5倍
问题:为什么是这个 1.5 因子?它依赖于实现吗?它是最优的吗?
另外,在这段代码中,有没有办法分析重新分配发生的确切时间? (有时也许可以在不移动数组的第一部分的情况下增加容量)
vector<int> v;
int previouscapacity = 0;
for (unsigned int i = 0; i < 1000000; i++)
{
v.push_back(i);
if (v.capacity() != previouscapacity)
{
wcout << L"new capacity: " << v.capacity() << L" new size: " << v.size() << L" ratio: " << ((float) v.capacity()) / previouscapacity << '\n';
previouscapacity = v.capacity();
}
}
new capacity: 1 new size: 1 ratio: 1.#INF
new capacity: 2 new size: 2 ratio: 2
new capacity: 3 new size: 3 ratio: 1.5
new capacity: 4 new size: 4 ratio: 1.33333
new capacity: 6 new size: 5 ratio: 1.5
new capacity: 9 new size: 7 ratio: 1.5
new capacity: 13 new size: 10 ratio: 1.44444
new capacity: 19 new size: 14 ratio: 1.46154
new capacity: 28 new size: 20 ratio: 1.47368
new capacity: 42 new size: 29 ratio: 1.5
new capacity: 63 new size: 43 ratio: 1.5
new capacity: 94 new size: 64 ratio: 1.49206
new capacity: 141 new size: 95 ratio: 1.5
new capacity: 211 new size: 142 ratio: 1.49645
...
new capacity: 466609 new size: 311074 ratio: 1.5
new capacity: 699913 new size: 466610 ratio: 1.5
new capacity: 1049869 new size: 699914 ratio: 1.5
注意:我使用的是 VC++ 2013
最佳答案
喜欢链接问题的答案What is the ideal growth rate for a dynamically allocated array?显示,总是将分配的大小加倍会导致释放的内存总是只是对于下一次分配来说太小了。 vector 将在堆中“游荡”,留下许多碎片。
最大化重用的“最佳”重新分配大小结果是 golden ratio这是 1.61803...
但是,1.5 很多更容易计算为 capacity() + capacity()/2
并且在实践中足够接近。这使其成为现有实现的热门选择。
关于c++ - 当我们 push_back 元素时 std::vector 什么时候扩大自己?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45403052/
有人可以解释一下为什么您会使用扩大或缩小转换吗?我已经阅读了很多关于这些的内容,但没有人给我一个实际的例子。谢谢! 最佳答案 (Java) 扩大和缩小转换与相关类型之间的转换有关。以抽象(超)类与其(
假设我有一个接口(interface): public interface FooInterface { public void someMethod(); } 我有一个实现这
我正在尝试用 ocaml 编写一个免费的 monad 库,关注 Control.Monad.Free来自haskell,但我在执行hoistFree 时陷入了困境。 hoistFree :: Func
我有这样的数据。每行代表该 ID 在某个日期的一个值。 ID Date Value A 2012-01-05 50 A 2012-01-08 100 A
我正在开发一个可以扩展/收缩的 SwiftUI List 单元,这是一个非常简单的东西,您可以在很多上下文中看到。类似于以下内容(以下内容在 UIKit 中实现): 说实话,我正在努力在 SwiftU
http://jsfiddle.net/bzL7p87k/ 我在这个表中有占位符,他们用特殊的词填充,但是当我有超过 4 行时怎么办?当我有 21 行的 21 个占位符时? 我的意思是:我只有一行与占
我需要在我的 Zoul 项目中使用一个库,它广泛使用 malloc 机制来分配动态内存。 问题是当这个库调用 malloc 时它返回 NULL 因为堆中没有足够的内存。 我试过这个简单的函数来查看程序
使用 bootstrap 4.0.0,我有以下代码: Title text text text Click me ... repeated many t
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this q
我有一个 TextView,我在其中设置了 HTML 文本。这篇文章有很多链接。当您点击一个链接时,它并不总是触发 onClick 方法。因此,我正在尝试扩展 ClickableSpan 的区域,以便
在 WPF 中,当用户将焦点放在 TextBox 中时,我想要一些动画,使 TextBox 变为多行并使其 Width 变大(在他打字时),当失去焦点时,TextBox 恢复到原来的大小。 大小未知。
我想在目录中搜索与任何单词列表匹配的任何文件。如果文件匹配,我想将该文件复制到一个新目录中。我创建了一小批测试文件并使以下代码正常工作: cp `grep -lir 'word\|word2\|wor
我有一个布局,左侧是图像,右侧是文本内容。我希望图像具有 100% 的高度,并且我希望保持图像的纵横比。文本内容应填充可用宽度。 我尝试使用 flex-box,但是图像 flex 元素不会根据图像大小
我使用 JHChainableAnimations增大(缩放) View 设置一个新值,然后再次将 View 缩小(缩放)到其原始大小。 我尝试过: var isGrowing = true
我不确定其他人是否会有这种奇怪的愿望,也就是说我意识到这可能是一个不寻常的请求。 我想采用顶部示例中的内容,并让它在除数“:”字符上自动变为“居中对齐”。 这是 Xcode 扩展程序可以编写的程序吗?
我正在为网站创建一个简单的 2 列布局,但遇到了一些问题。当我向应用了 float:left 的列添加填充时, float 会扩展超过我定义的宽度。我似乎无法在任何地方找到这个问题的答案。 最佳答案
我得到了一个组织为 的图片库.所有图像都在 元素,当我将鼠标移到其中一张图片上时,它应该会增长以向用户提供视觉反馈。问题是,当我只是使用 animate() 更改图像的大小时,其他图片将被推到一边,
我正在尝试放大最居中的 ListView 项目。 (最终,我希望将其扩展为一种简单轻巧的3D效果,元素在屏幕中间时会放大,在下方时会缩小,全黑背景和文本项放大和缩小……) 所以,我制作了一个虚拟 Li
我有一个 canvas,我希望它是 100% 屏幕宽度和至少 100% 屏幕高度,但如果以下 div 超出底部屏幕。 我正在使用 Trianglify 填充 Canvas 。 var patt
我很难以我很容易理解的方式找到关于这个主题的信息,所以我要求对我找到的内容进行审查。这都是关于转换和转换的。 在例子中我将提到: (signed/unsigned) int bigger; (sign
我是一名优秀的程序员,十分优秀!