是 C++ 语句“delete [] Q;”的 Big-O O(1) 还是 O(n)?

2024-01-03

标题是不言自明的。很简单的问题。我认为这是 O(n),但想在明天的期末考试之前验证一下。


简短的回答是……这取决于情况。

If Q是一个指向具有析构函数的对象数组的指针,那么delete[] Q将需要调用所有这些析构函数。这将调用 O(n) 析构函数,其中 n 是数组中元素的数量。另一方面,如果Q指向没有析构函数的对象数组(例如,int或简单structs),那么不需要调用析构函数,只需要 O(1) 时间。

现在请注意,这些析构函数不必每次都在 O(1) 时间内运行。如果对象是,比如说,std::vector对象,那么每个析构函数必须依次触发更多的释放。在不了解更多关于这些对象是什么的情况下,我们只能说,如果调用了析构函数,则如果析构函数是平凡的,则将调用 0 个析构函数,否则将调用 O(n) 析构函数。

但这忽略了堆分配器如何工作的实现细节。释放一个内存块可能需要 O(log K) 时间,其中 K 是已分配块的总数,或者无论有多少内存块,都可能需要 O(1) 时间,或者可能需要O(log log K) 等。如果不知道分配器如何工作,你真的无法确定。

简而言之,如果您纯粹专注于在将块交还给内存分配器之前清理对象所需的工作,则如果存储的对象具有析构函数,则会调用 O(n) 个析构函数,否则会调用 0 个析构函数。这些析构函数可能需要相当长的时间才能完成。然后,将内存块重新引入内存分配器会产生成本,这可能需要花费一定的时间。

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是 C++ 语句“delete [] Q;”的 Big-O O(1) 还是 O(n)? 的相关文章

随机推荐

  • Cucumber-jvm @after 与 Appium 驱动程序

    我在用着cucumber jvm 并努力在全球范围内实施 After应该执行的方法只有一次所有场景执行完成后 这 After方法应该退出appium驱动程序 现在 After钩子在之后执行each运行场景 这意味着每次都应该从头开始创建驱动
  • jQuery 上的 trigger('click') 和 click() 有什么区别

    我正在寻找这两者之间的性能差异 我在 SSE 中找不到关于这个主题的好的答案 一些例子会有很大帮助 如果你查看 jQuery 代码 你会发现所有click does 是执行trigger click jQuery each blur foc
  • 使用 scala 和 GAE 玩框架

    有谁知道如何让 Play 框架的 scala 版本在 Google App Engine 中运行 此时我只是尝试让默认应用程序运行 我正在使用带有 gae 1 4 和 scala 0 9 1 模块的 Play 1 2 2 我创建了一个默认应
  • 如何在特征值中转置张量

    我试图获得两个张量的矩阵乘积 其中一个张量应该在相乘之前转置 At B 到目前为止我发现的是没有任何转置和两个矩阵转置的矩阵乘积 我正在寻找一种方法 可以直接收缩两个张量并转置其中一个张量 或者在收缩一个张量之前转置一个张量 我发现 转置效
  • 使用 C# 通过数据库中存储的文件路径在 Crystal Reports 10 中显示图像

    我有一个 C Windows 应用程序 它将员工数据存储到 MYSQL 数据库中 包括他们的图片文件路径 192 168 13 6 IDPictures Unknown jpg 有人可以帮助我如何通过从数据库读取文件路径来显示 Crysta
  • php preg_replace 匹配字符串但仅替换其中的一部分

    我有这样的文字 Retailer ul Amazon foloseste metode severe pentru a si descuraja etc angajatii din depozite sa nu mai fure din p
  • 使用 SELECT 结果作为其他 SELECT 中的 COLUMN 名称

    是否可以使用选择的结果作为字符串与其他选择中列名中的另一个字符串连接 Example SELECT brand FROM articles a WHERE a id 12345678 结果 BRAND A 我现在想要连接 PRICE to
  • 如何使用 LoadImage 和 StretchDIBits 绘制 PNG 图像?

    这与问题有关如何使用 Win32 GDI 加载 PNG 图像 如果可能 不要使用 GDI https stackoverflow com questions 4567875 how would i load a png image usin
  • 从 PyQt GUI 类外部访问 GUI 元素 text( )

    Ui MainWindow 是由设计器和 pyuic 生成的 py 文件 我想将 PyQt GUI 元素文本值传递到另一个文件并执行一些基本操作并返回结果 父文件 from PyQt4 import QtCore QtGui try fro
  • 将 SQL 查询替换为 LINQ 查询

    我有SQL检查今天的查询 根据表中存储 3 个字母字符的字段进行检查 如下所示 如果今天是星期二我需要归还记录 我有这样的 SQL 查询 SELECT TOP 1 EndTime StartTime OrderDay FROM dbo Se
  • .NET 4.6 之前的 Buffer.MemoryCopy 的替代方案

    我正在尝试将一些 NET 4 6 代码降级到 NET 4 5 这是我目前正在使用的代码块 fixed byte destination dataBytes Buffer MemoryCopy data destination dataLen
  • 为什么 JavaMail Transport.send() 是静态方法?

    我正在修改我没有编写的使用 JavaMail 的代码 并且在理解为什么 JavaMail API 是这样设计的方面遇到了一些困难 我有一种感觉 如果我理解的话 我可以做得更好 We call transport session getTra
  • Java使用String.format进行十进制格式化?

    我需要将十进制值格式化为字符串 其中我始终显示至少 2 位小数 最多 4 位小数 例如 34 49596 would be 34 4959 49 3 would be 49 30 可以使用 String format 命令来完成此操作吗 或
  • 如何在 yocto 中打补丁?

    我正在尝试使用 yocto poky warrior 和 meta tegra Warriors l4t r32 2 层为 jetson nano 构建图像 我一直在关注这个线程 https stackoverflow com questi
  • T4 vs CodeDom vs Oslo [已关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 连接集合返回函数 (SRF) 并访问 SQLAlchemy 中的列

    假设我有一个activity表和一个subscription桌子 每个活动都有一个对其他对象的通用引用的数组 每个订阅都有一个对同一集中的其他对象的通用引用 CREATE TABLE activity id serial primary k
  • 检查特定的exe文件是否正在运行

    我想知道如何检查特定位置的程序是否正在运行 例如 test exe 有两个位置 c loc1 test exe 和 c loc2 test exe 我只想知道 c loc1 test exe 是否正在运行 而不是 test exe 的所有实
  • 如何动态改变datagrid行的背景颜色?

    似乎有各种黑客可以改变数据网格行的背景颜色 但所有这些似乎都发生在渲染时 See 在 Adob e Flex 中设置数据网格行的背景颜色 https stackoverflow com questions 748213 setting ba
  • Sql:将行转变成列

    考虑下面的例子 我有一个Person包含人员记录和人物属性包含链接到人员的可选属性的表 表 人 ID Name 1 Joe Bloggs 2 Jane Doe 表人员属性 PersonId Key Value 1 Age 27 2 Hair
  • 是 C++ 语句“delete [] Q;”的 Big-O O(1) 还是 O(n)?

    标题是不言自明的 很简单的问题 我认为这是 O n 但想在明天的期末考试之前验证一下 简短的回答是 这取决于情况 If Q是一个指向具有析构函数的对象数组的指针 那么delete Q将需要调用所有这些析构函数 这将调用 O n 析构函数 其