我们可以用c ++创建可变长度数组吗?

时间:2016-01-24 05:11:15

标签: 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

1 个答案:

答案 0 :(得分:3)

标准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进行编译。