c++ - 我们可以在 C++ 中创建可变长度数组吗?

标签 c++ data-structures arrays

我正在尝试创建这个简单的程序,它再次向用户显示数组的数据。我想创建一个可变长度数组。在此程序中,首先询问用户数组元素的数量,然后是数据。

问题是,在某些 IDE 中,此代码运行完全正常,但在其他 IDE 中,它给出了不允许使用可变长度数组的错误...那么什么是正确的?

void main()
{
    int t;
    cin>>t;
    int ar[t];
    for(int i=0;i<t;i++)
    {
        cin>>ar[i];
    }

    for(int i=0;i<t;i++)
    {
        cout<<ar[i]<<"\t";
    }
}

例如。这在 Turbo C++ 中不起作用...但可以在此 IDE 中运行 http://www.tutorialspoint.com/compile_cpp11_online.php

https://www.codechef.com/ide

最佳答案

标准 C++ 不支持可变长度数组。一些实现将它作为扩展提供,但正如您已经发现的那样,依赖它们会产生不可移植的代码。

我建议您改用 std::vector。它适用于纯标准 C++。

int size;
if (!(std::cin >> size) || (size < 0))
  throw std::invalid_argument {"bad size"};
std::vector<int> numbers (size);

在 GCC 和 Clang 中,您可以使用 -pedantic 编译器开关来关闭任何非标准扩展。这将帮助您避免意外编写不可移植的代码。当然,您还应该使用-Wall-Wextra-Werror 进行编译。

关于c++ - 我们可以在 C++ 中创建可变长度数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35001006/

相关文章:

data-structures - 在 cuda 中构建 kd 树

c - 在结构数组上使用 realloc

arrays - 如何保存 GMSPlace 数组

c - 无法使用 realloc : "invalid next size" 扩展数组

c++ - 无法打印完整的二叉搜索树,因为我从最低节点向后迭代的逻辑有缺陷

c++ - 使用对象参数声明函数

c++ - 是否编译了带有 if(this==NULL) 测试的类函数?

c++ - 在另一个线程中运行 tcp 服务器

algorithm - 如何从半边结构中去除边?

c++ - 拉格朗日逼近-c++