VS2017是否有VLA(可变长度阵列)支持解决方法
Is there a VLAs (variable length arrays) support workaround for VS2017?
如此简单的代码,如下所示:
int n;
cin >> n;
int s[n], p[2*(n-1)][3];
我必须翻译成:
int n;
cin >> n;
vector<int> s(n, 0);
vector<vector<int>> p(2 * (n - 1), vector<int>(3));
我希望看到类似以下内容:
int n;
cin >> n;
mat s(n), p(2*(n-1), 3);
我绝对不想使用newmake_unique
和std::array
+ std::vector
混合来做这么简单的事情。恕我直言,两行是一团糟,所以我看到了一种让 C 像 sintax 一样保持的方法。
那么什么是解决方法呢?任何基于定义/标准标头/可复制粘贴 STL 的C++类型?
标准C++不支持可变长度数组。
std::vector<int>
是实现连续int
数据块的惯用方法,这些数据块的大小在编译时未知。一个好的经验法则是使用std::vector
,直到你找到一个令人信服的理由不这样做。
标准C++不支持可变长度数组(即至少一个维度不是编译时常量的数组(。因此,你不能写类似的东西 cin >> n; int s[n]
.存在一些扩展,但仍然存在 - 对于非常大的n
值,如果手头的编译器将这样的数组放在"堆栈"上,您可能会遇到麻烦,这通常比堆更受限制。
标准方法是使用 std::vector<int> s(n)
或者,如果 - 虽然通常不推荐 - 出于某种原因你想要一个不被对象包装的"纯"数组,你可以写int *s = new int[n];
,尽管当你不再需要数组时,你有责任调用delete[] s;
。
alloca是另一种选择。不是标准,但得到广泛支持。
根据标准C++,没有可变长度数组 (VLA(。要么使用 STL std::vector
,要么将变量定义为 const
(不能在运行时修改(。
相关文章:
- 编译时未启用intel oneApi CUDA支持
- OpenMP阵列性能较差
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 使用CMake检测支持的C++标准
- 为什么istream不支持右值提取
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 扩展光电二极管探测器以支持多个传感器
- 当我的阵列太大时出现分段错误
- MSVC是否支持C++11样式的属性而不是__declspec
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 位阵列上的快速AND运算
- 阵列必须使用大括号封闭的初始器进行初始化
- 没有从阵列<float>到阵列<int>的可行转换
- C++动态安全 2D 交错阵列
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- 将平面阵列重塑为复杂的特征类型
- 如何使用英特尔 PIN 捕获阵列的所有负载?
- VS2017是否有VLA(可变长度阵列)支持解决方法