问题标签 [dynamic-arrays]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1846 浏览

java - Java 空指针异常

我试图将我在网上找到的一个类改编为一个动态整数数组,用于一个动态的“实体”数组,但现在我得到了一个“NullPointerException”。

引发异常的代码是:

DynArrayEntities 类的相关部分:

在此先感谢您的帮助!

0 投票
7 回答
8141 浏览

c# - C# 在数组末尾增加一个元素

在我的程序中,我有一堆不断增长的数组,其中一个新元素一个接一个地增长到数组的末尾。我发现列表是我程序关键部分的速度瓶颈,因为与数组相比,它们的访问时间很慢 - 切换到数组将性能极大地提高到可接受的水平。因此,为了增加数组,我使用了 Array.Resize。这很好用,因为我的实现将数组大小限制为大约 20 个元素,因此 Array.Resize 的 O(N) 性能是有限的。

但是,如果有一种方法可以在最后将数组增加一个元素而不必使用 Array.Resize 会更好;我相信它会将旧数组复制到新大小的数组中。

所以我的问题是,是否有一种更有效的方法可以在不使用 List 或 Array.Resize 的情况下将一个元素添加到数组的末尾?

0 投票
5 回答
3338 浏览

c - 使用指针在 C 中查找二维数组的维度

我在 C 中创建了一个二维数组,如下所示:

现在,我打电话:

在函数func中,我如何计算行和列的尺寸?

0 投票
4 回答
2837 浏览

c++ - 在 C++ 中清理对象的动态数组

我对在 C++ 中处理对象数组有点困惑,因为我似乎无法找到有关它们如何传递(引用或值)以及它们如何存储在数组中的信息。

我希望一个对象数组是一个指向该对象类型的指针数组,但我还没有发现这个写在任何地方。它们会是指针,还是对象本身会以数组的形式排列在内存中?

在下面的示例中,自定义类 myClass 包含一个字符串(这是否会使其具有可变大小,或者字符串对象是否包含指向字符串的指针,因此占用了一致的空间量。我尝试创建一个动态数组myContainer 中的 myClass 对象。在 myContainer.addObject() 方法中,我尝试创建一个更大的数组,将所有对象与新对象一起复制到其中,然后删除旧对象。我完全不相信我我用我的析构函数正确清理我的内存——我可以在这方面做些什么改进?

0 投票
3 回答
3695 浏览

c - 通过C中的管道使用动态数组写入和读取结构

我有一个内部带有动态数组的结构:

我想将这个结构传递到 C 中的一个管道和一个进程环周围。当我在每个进程中更改 count 的值时,它会正确更改。我的问题是动态数组。

我这样分配数组:

每个进程都应该从管道中读取,对该数组执行一些操作,然后将其写入另一个管道。环设置正确;那里没有问题。我的问题是,除了第一个进程之外,所有进程都没有得到正确的数组副本。我在第一个过程中将所有值初始化为 10;但是,它们在随后的那些中都显示为 0。

日志:

现在,如果我将代码更改为,比如说,

一切都正确地通过管道,没问题。我在 C 中使用readwrite

0 投票
3 回答
405 浏览

c++ - 如何在类的构造函数中定义一个没有常量大小的静态数组?(C++)

我有一个类定义为:

我需要它包含一个像这样的静态数组:

但是,我无法在类中定义,因此可以创建指向 2D 数组的指针(出于好奇,还可以创建 3、4 和 5D 数组),将其作为类的成员,并将其初始化为构造函数如:

编辑:这里的想法是每个对象都有不同的宽度和高度,所以我用来表示该对象的数组对于该对象将是唯一的,但是一旦定义了该数组(最好在构造函数中),它就不会改变. 并且特定对象的宽度和高度值在编译时是已知的。

编辑:数组用于碰撞检测,方法是将presc两个对象的数组叠加到一个大数组上,并查看重叠的位置,声明如下:

0 投票
4 回答
1588 浏览

c++ - 为什么 C++ 允许非动态分配的可变长度数组?

我对 C++ 比较陌生,从一开始我就被灌输了你不能做类似的事情

相反,您必须使用动态内存。但是,我最近发现上面的内容可以编译(尽管我收到了一个 -pedantic 警告,说它被 ISO C++ 禁止)。我知道如果标准不允许这样做显然是个坏主意,但我以前什至不知道这是可能的。

我的问题是,如果标准不允许,为什么 g++ 允许不动态分配的可变长度数组?另外,如果编译器可以做到这一点,为什么它不在标准中?

0 投票
2 回答
1426 浏览

c++ - 编写动态二维数组时访问冲突...有时

该程序旨在生成一个动态数组,但是在给定特定维度时写入时会出现访问冲突错误。例如:R = 6, C = 5 崩溃,但是 R = 5, C = 6 不会。如果您想知道,“修复”这个损坏的程序不是我的作业,这是我们在课堂上学到的方法。我的评估的一部分也是使用这种方法,所以向量已经出来了。提前致谢!

0 投票
3 回答
2224 浏览

c - 带有 void 指针的动态数组队列数据结构的问题

也许没有办法以我喜欢的方式解决这个问题,但我不知道一切,所以我最好问问......

我已经实现了一个带有动态数组的简单队列,因此用户可以使用它想要的任意数量的项目进行初始化。我也在尝试使用void指针来允许任何数据类型,但这就是问题所在。

这是我的代码:

问题出在queuePop功能上。当我调用它时,我失去了价值,因为我立即释放了它。我似乎无法解决这个困境。我希望我的库是通用的和模块化的。用户不应该关心分配和释放内存,这是图书馆的工作。

用户如何仍能从中获取值queuePop并让库处理所有内存分配/释放?

0 投票
7 回答
13094 浏览

delphi - Delphi中的TStringList,动态数组还是链表?

我有一个选择。

我有许多需要存储和访问的已排序字符串。看起来我可以选择使用:

  1. 一个 TStringList

  2. 字符串的动态数组,以及

  3. 字符串的链接列表(单链接)

    艾伦在他的评论中建议我也添加选择:

  4. TList<string>

在什么情况下,这些中的每一个都比其他的更好?

哪个最适合小型列表(10 项以下)?

哪个最适合大型列表(超过 1000 个项目)?

哪个最适合大型列表(超过 1,000,000 个项目)?

哪种方法可以最大程度地减少内存使用?

哪个是最好的,以最大限度地减少加载时间以在最后添加额外的项目?

从头到尾访问整个列表的访问时间最小化是什么?

在此基础上(或任何其他基础上),哪种数据结构更可取?

作为参考,我使用的是 Delphi 2009。


Dimitry 在评论中说:

描述你的任务和数据访问模式,然后就有可能给你一个准确的答案

好的。我有一个包含大量数据的家谱程序。

对于每个人,我都有许多事件和属性。我将它们存储为短文本字符串,但每个人都有很多,范围从 0 到几百。我有成千上万的人。我不需要随机访问它们。我只需要将它们作为多个字符串以已知顺序关联到每个人。这是我成千上万的“小清单”的情况。它们需要时间来加载和使用内存,如果我需要它们全部需要时间来访问(例如导出整个生成的报告)。

然后我有一些更大的列表,例如我的“虚拟”树视图的所有部分的名称,它可以有数十万个名称。同样,我只需要一个可以按索引访问的列表。这些与树视图分开存储以提高效率,树视图仅在需要时检索它们。这需要一段时间来加载,并且对我的程序来说在内存方面非常昂贵。但我不必担心访问时间,因为一次只能访问几个。

希望这能让您了解我要完成的工作。

ps 我在 StackOverflow 上发布了很多关于优化 Delphi 的问题。我的程序读取 100,000 人的 25 MB 文件,并在 8 秒内为他们创建数据结构和报告和树形视图,但使用 175 MB 的 RAM。我正在努力减少这种情况,因为我的目标是在 32 位 Windows 中加载数百万人的文件。


我刚刚在这个 StackOverflow 问题中找到了一些优化 TList 的绝佳建议: 是否有更快的 TList 实现?