问题标签 [variable-length-array]

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 投票
1 回答
2592 浏览

arrays - 伪代码数组的长度或大小会影响其运行时间吗?

我被要求编写伪代码并分析我的函数的运行时间。

我得到 2 个降序排列的数组和 1 个整数 k,然后被要求找出 2 个数组的并集中的第 k 个最大数。

我已经运行了我的代码,因为作业截止日期还没有过去,我不能在这里发布代码,对不起。

有一些缺陷,问题 1:我不知道我是否需要处理 k>sum(arraylen(a & b)) 之类的场景,或者如果给定 2 个数组为空的场景......说如果我必须,什么我应该使用返回值吗?-1?如果第 k 个最大的恰好是 -1 怎么办……我不确定。

问题2:当我试图获取数组的长度时,我使用了sizeof(ArrayA)/4,(C++),我的朋友指出: - 一方面,sizeof可能不是伪代码的组成部分,所以我可能需要像 ArrayA.length() 一样使用 - 另一方面,如果我使用 length(),它将使我的算法采用 O(n) 而不是 O(k),因为数组需要完全通过自身才能获得长度。他的观点是真的吗?如果是,我应该如何修改我的代码,以便它可能是 O(k) ?请帮忙,

我很感激任何帮助。多谢。

0 投票
4 回答
124 浏览

c++ - 在 C++ 中分配多维数组,部分可变长度

假设我有一个多维数组,在 C99 中我可以这样写:

尽管有多个编译器支持,但这并不是严格意义上的 C++,直到 C++14 才会包含在内。为了使用 boost::scoped_array 获得相同的(除了堆栈/堆问题与我的情况无关),我写道:

所以,不是那么简洁的表达方式。我是否遗漏了什么,或者对于具有可变长度的多维数组,没有简单的普通 C++ 方法来获得快速分配?

一些参考:为什么可变长度数组不是 C++ 标准的一部分?

0 投票
6 回答
287 浏览

c++ - 如何将 VLA 传递给函数模板?

我有以下无法编译的代码。

如果 main 如下所示,传递数组的正确方法是什么。

错误:没有匹配的函数可以调用 array_ini_1d.......

0 投票
2 回答
1976 浏览

c++ - Are variable length arrays there in c++?

I had always thought that variable length arrays were not allowed in c++(Refer :Why aren't variable-length arrays part of the C++ standard?) .But than why does this code compile and work?

0 投票
0 回答
424 浏览

matlab - 从结构中绘制不同长度的数据集 - 避免填充

我希望这是一个足够简单的问题,但我是一个初学者,经过几次会议后我还没有自己管理它。

我有一个1x29包含 8 个字段的金融市场数据结构:stock_market. 第一个字段是日期

结构的前 11 个“行”

如您所见,并非股票市场的所有组成部分,即股票具有相同长度的时间序列(一些公司比其他公司更新或已经离开市场等)

我想总体上知道如何最好地操纵这种不均匀的时间序列数据结构。一个具体示例是,我想编写一个函数,该函数可以从结构中提取一只股票的“日期”和“AdjClose”(调整后的收盘价),并将其绘制在图表上,显示日期/标在 x 轴上,价格在右侧。扩展是AdjClose在一个 x 轴上绘制多个时间序列,即使它们各自Date值的长度不同。我不想填充这些字符串,以便在图表的一部分中沿零运行线。一旦我可以管理此任务,其他更复杂的功能应该不难。

我没有分享任何代码,因为它只是'plot(stock_market(1).Date, stock_market(1).AdjClose)` 并且大部分是红色的错误。我已经阅读了一些关于填充的讨论,但就像我上面提到的,不想用零或任何其他数字填充图表。对于其他功能,我可能需要填充它们,但如果有人有不同的解决方案 - 很高兴听到它:-)

提前致谢。

0 投票
1 回答
168 浏览

c - 如何在 C 中运行时扩展一维数组?

我正在学习 C 语言,我有一个关于动态内存分配的问题。
考虑到我有一个程序,用户必须输入数字或键入字母“E”才能退出程序。用户输入的数字必须存储在一维数组中。该数组以单个位置开始。
如何将我的整数数组增加到用户输入的每个数字以将该数字存储在这个新位置?我想我必须正确使用指针?然后,如何打印存储在数组中的值?
我发现的所有示例对于初学者来说都很难理解。我阅读了 malloc 和 realloc 函数,但我不知道该使用哪一个。
谁能帮我?谢谢!

0 投票
6 回答
18200 浏览

c - 无论如何,VLA 有什么意义?

我了解什么是可变长度数组以及它们是如何实现的。这个问题是关于它们为什么存在的。

我们知道 VLA 只允许在功能块(或原型)内使用,并且它们基本上不能在堆栈上的任何地方(假设正常实现):C11,6.7.6.2-2:

如果一个标识符被声明为具有可变修改类型,它应该是一个普通标识符(如 6.2.3 中定义的),没有链接,并且具有块范围或函数原型范围。如果标识符被声明为具有静态或线程存储持续时间的对象,则它不应具有可变长度数组类型。

让我们举一个小例子:

有两种情况需要注意:

  • n <= 0f必须注意这一点,否则行为未定义:C11,6.7.6.2-5(强调我的):

    如果 size 是一个不是整数常量表达式的表达式:如果它出现在函数原型范围的声明中,则将其视为被替换为*; 否则, 每次对其进行评估时,它的值都应大于零。可变长度数组类型的每个实例的大小在其生命周期内不会改变。如果大小表达式是运算sizeof符操作数的一部分,并且更改大小表达式的值不会影响运算符的结果,则未指定是否计算大小表达式。

  • n > stack_space_left / element_size: 没有标准的方法来查找剩余的堆栈空间(因为只要涉及标准,就没有堆栈这样的东西)。所以这个测试是不可能的。唯一明智的解决方案是为 预定义最大可能大小n,例如N,以确保不会发生堆栈溢出。

换句话说,程序员必须确定0 < n <= N一些N选择。但是,该程序n == N无论如何都应该可以工作,因此不妨将数组声明为 constant sizeN而不是 variable length n

我知道引入 VLA 是为了替换alloca(如本答案中所述),但实际上它们是同一件事(在堆栈上分配可变大小的内存)。

所以问题是为什么allocaVLA 存在并因此存在,为什么它们没有被弃用?在我看来,使用 VLA 的唯一安全方法是使用有界大小,在这种情况下,采用最大大小的普通数组始终是一个可行的解决方案。

0 投票
2 回答
75 浏览

c - 带有可变长度数组的奇怪输出?

我对此很头疼,但无法继续,所以请帮忙。从事编程任务:

因此,我不得不使用 scanf(),而不是使用 fgets(),然后使用 strtol() 提取数字,因为分配平台不能与 strtol() 一起正常工作。

这是我的程序:

输出:

FWIW gcc --version gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

为什么第二个输出与第一个不匹配?我在这里想念什么?

0 投票
2 回答
108 浏览

c - C访问可变长度数组

我需要访问我在从文件读取的第一行创建的可变长度数组。为了在我阅读以下行时访问该数组,我需要在第 1 行被读出我的条件语句之前对其进行初始化。但这是在我知道数组的长度之前。

这是我的代码示例

编辑:我的问题是我应该如何才能在我需要的地方访问这个数组?

0 投票
2 回答
195 浏览

c - std=gnu89 下是否支持变长数组?

我的代码包含以下行:

我很惊讶地看到它使用gcc没有任何标志的默认编译没有问题。根据man gccc 代码的默认标准是gnu89. 该标准是否支持这种类型的数组初始化,如果支持,我在哪里可以找到参考?