40得票5回答
为什么通过基类指针删除派生类对象的数组是未定义行为?

我在C++03标准的5.3.5 [expr.delete] p3章节中发现了以下代码片段: 在第一种情况(删除对象)中,如果要删除的对象的静态类型与其动态类型不同,则静态类型必须是操作数的动态类型的基类,且静态类型必须具有虚析构函数,否则行为未定义。 在第二种情况(删除数组)中,如果要...

36得票2回答
当我在运行时不知道数组长度时,如何声明一个数组?

我最开始定义了一个全局变量array[1..1000]。但现在我需要将其定义为n,而不是1000,但我直到后来才知道n的大小。 我知道填满数组之前n的大小,但我需要它是全局的,因此需要一种在运行时定义全局数组大小的方法。 背景是使用文件中字节的线性转换填充数组。在打开文件之前,我不知道文件有...

33得票2回答
为什么C++不支持在堆栈上使用动态数组?

C99中这是合法的:void f(size_t sz) { char arr[sz]; // ... } 然而,动态大小的栈数组在C++中已经被废弃,而且在C++11中也没有看到它的回归。据我所知,C++是考虑到与C的兼容性而设计的,因此我想知道:不包括这个有用的特性肯定有一些...

31得票6回答
指向指针的动态二维数组

第一次来这个网站,那就试试吧... 我是 C++ 的新手,目前正在学习 D.S. Malik 的《使用 C++ 的数据结构(第二版)》这本书。 在这本书中,Malik 提供了两种创建动态二维数组的方法。第一种方法是声明一个指针数组变量,其中每个指针都是整数类型。例如:int *board[...

31得票6回答
基于范围的for循环在动态数组上的应用?

有一个基于范围的for循环,其语法为:for(auto& i : array) 它适用于常量数组,但不适用于基于指针的动态数组,比如int *array = new int[size]; for(auto& i : array) cout<< i <&l...

31得票5回答
用链表还是动态数组来实现栈?

我在学校最后一年开始复习数据结构和算法,以确保我掌握了所有内容。其中一个复习问题说“使用链表或动态数组实现堆栈,并解释为什么你做出了最佳的选择”。 对我来说,使用带有尾指针的列表来实现堆栈更直观,因为它可能需要经常调整大小。对于大量的数据来说,似乎使用列表是更好的选择,因为动态数组重新调整大...

31得票3回答
将指针递增到大小为0的动态数组中是否未定义?

据我所知,虽然我们无法创建大小为0的静态内存数组,但我们可以使用动态数组实现:int a[0]{}; // Compile-time error int* p = new int[0]; // Is well-defined 据我所了解,p 表示最后一个元素后的位置。我可以打印出 p 指向的地...

29得票5回答
向数组添加元素的最快方法

如何快速将新项添加到现有数组中?Dim arr As Integer() = {1, 2, 3} Dim newItem As Integer = 4 我已经知道,当处理动态项目列表时,应该使用List,ArrayList或类似的IEnumerables。但如果你被困在使用数组的旧代码中怎么办...

23得票2回答
为什么我的C++编译器会接受变长数组(VLAs),即使这个特性不是标准的?

正如我们已经知道的那样,VLA(在C99中标准化)不是C++标准的一部分,所以下面的代码在C++中是"非法"的: void foo(int n) { int vla[n]; for (int i = 0; i < n; ++i) { vla[i] = i; } } ...

22得票11回答
在VB6中,对多维数组使用ReDim Preserve操作。

我正在使用VB6,需要对多维数组执行ReDim Preserve: Dim n, m As Integer n = 1 m = 0 Dim arrCity() As String ReDim arrCity(n, m) n = n + 1 ...