C++ HeapAlloc的计算复杂性

C++ HeapAlloc的计算复杂性,c++,windows,heap,complexity-theory,C++,Windows,Heap,Complexity Theory,vector的C++实现依赖于在超出其当前容量时将其扩展两次 PurthBuffe操作,显然,在Windows上使用这个问题,并且根据C++标准,应该是有原因的。Windows需要多长时间才能运行?如果事先不知道某个特定程序中的指令集,“摊销”恒定时间一词的意思是“如果您执行一长串操作,则每个操作平均需要一个固定的时间。“使用向量的方法是对表进行加倍。当向量空间不足时,它将使当前向量的大小加倍,而不是为单个项目创建更多空间。这将花费相当于向量大小的时间(对于你来说是O(n)),但是你只需要在表的

vector
的C++实现依赖于在超出其当前容量时将其扩展两次<代码> PurthBuffe<代码>操作,显然,在Windows上使用这个问题,并且根据C++标准,应该是有原因的。Windows需要多长时间才能运行?如果事先不知道某个特定程序中的指令集,“摊销”恒定时间一词的意思是“如果您执行一长串操作,则每个操作平均需要一个固定的时间。“使用
向量的方法是对表进行加倍。当向量空间不足时,它将使当前向量的大小加倍,而不是为单个项目创建更多空间。这将花费相当于向量大小的时间(对于你来说是O(n)),但是你只需要在表的大小翻倍的情况下进行。因此,如果从大小为n的向量开始,再添加n个项目,第一个项目将花费O(n)时间(将表的大小加倍并复制旧值),但下一个n-1项目将花费O(1)时间。这就为n次插入提供了O(n)+(n-1)O(1)时间,或者总的O(2n)=O(n)时间。平均每个操作的时间为O(1)。

术语“摊销”恒定时间意味着“如果执行一个长的操作序列,每个操作平均需要一个恒定的时间。”使用
向量的方法是使用表加倍。当向量空间不足时,它将使当前向量的大小加倍,而不是为单个项目创建更多空间。这将花费相当于向量大小的时间(对于你来说是O(n)),但是你只需要在表的大小翻倍的情况下进行。因此,如果从大小为n的向量开始,再添加n个项目,第一个项目将花费O(n)时间(将表的大小加倍并复制旧值),但下一个n-1项目将花费O(1)时间。这就为n次插入提供了O(n)+(n-1)O(1)时间,或者总的O(2n)=O(n)时间。平均每个操作的时间为O(1)。

术语“摊销”恒定时间意味着“如果执行一个长的操作序列,每个操作平均需要一个恒定的时间。”使用
向量的方法是使用表加倍。当向量空间不足时,它将使当前向量的大小加倍,而不是为单个项目创建更多空间。这将花费相当于向量大小的时间(对于你来说是O(n)),但是你只需要在表的大小翻倍的情况下进行。因此,如果从大小为n的向量开始,再添加n个项目,第一个项目将花费O(n)时间(将表的大小加倍并复制旧值),但下一个n-1项目将花费O(1)时间。这就为n次插入提供了O(n)+(n-1)O(1)时间,或者总的O(2n)=O(n)时间。平均每个操作的时间为O(1)。

术语“摊销”恒定时间意味着“如果执行一个长的操作序列,每个操作平均需要一个恒定的时间。”使用
向量的方法是使用表加倍。当向量空间不足时,它将使当前向量的大小加倍,而不是为单个项目创建更多空间。这将花费相当于向量大小的时间(对于你来说是O(n)),但是你只需要在表的大小翻倍的情况下进行。因此,如果从大小为n的向量开始,再添加n个项目,第一个项目将花费O(n)时间(将表的大小加倍并复制旧值),但下一个n-1项目将花费O(1)时间。这就为n次插入提供了O(n)+(n-1)O(1)时间,或者总的O(2n)=O(n)时间。平均每个操作的时间为O(1)。

请记住,STL将使用
新的
(或自定义分配器),因此不需要在Windows平台上调用
HeapAlloc

也就是说,STL文档不能保证与低级API调用的任何运行时一致性,它只定义了在自己的墙中实现的内容

还请记住,
HeapAlloc
的实现可能会在操作系统版本甚至Service Pack版本之间发生变化,因此,这里的任何答案都很容易被未来的版本淘汰

就我个人而言,我更关心堆中锁的数量和长度(由于通过多个线程同时访问而需要确保数据结构的一致性)


进一步阅读:

请记住,STL将使用
新的
(或自定义分配器),因此不需要在Windows平台上调用
HeapAlloc

也就是说,STL文档不能保证与低级API调用的任何运行时一致性,它只定义了在自己的墙中实现的内容

还请记住,
HeapAlloc
的实现可能会在操作系统版本甚至Service Pack版本之间发生变化,因此,这里的任何答案都很容易被未来的版本淘汰

就我个人而言,我更关心堆中锁的数量和长度(由于通过多个线程同时访问而需要确保数据结构的一致性)


进一步阅读:

请记住,STL将使用
新的
(或自定义分配器),因此不需要在Windows平台上调用
HeapAlloc

也就是说,STL文档不能保证与低级API调用的任何运行时一致性,它只定义了在自己的墙中实现的内容

还请记住,
HeapAlloc
的实现可能会在操作系统或甚至Service Pack版本之间发生变化,因此,任何答案都可能很容易被fut淘汰