【问题标题】:How do I set an array size with a variable? C++ [duplicate]如何使用变量设置数组大小? C++ [重复]
【发布时间】:2017-10-03 20:46:33
【问题描述】:

我有一些代码定义了一个名为“size”的变量,然后使用它,但由于某种原因它不起作用;错误是“表达式未计算为常数”

int main()
{
    int size;
    int userValue;
    char input;

    do
    {

        cout << "Enter an int for the size of the array:" << endl;
        cin >> size;

        int a[size];

        cout << "Enter an integer between 1 and " << size << " to search for in the array." << endl;
        cin >> userValue;

        populateArray(a, size);

        linearSearch(a, size, userValue);
        binarySearch(a, size, userValue);

        cout << "Press 'y' and enter to run again or just enter to quit";
        cin.sync();
        cin.get(input);

    }while(input == 'y');
}

你可以忽略其他函数,因为它们在定义我的数组之前没有被调用,我尝试将大小设置为一个值,仍然不起作用。

编辑:忘了提

#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;

【问题讨论】:

  • int a[size] 是一个可变长度数组——它不是标准 C++ 的一部分。你应该使用std::vector
  • 技术上你不能。数组大小必须在编译时知道。一些编译器提供了一个允许可变长度数组的扩展,但是一旦你设置了大小,大小就固定了。无论如何,您的编译器似乎不提供 VLA 扩展。请改用std::vector
  • 啊,所以我必须使用 Vectors ;好的,无论如何,谢谢,我只是确保我没有其他方法可以做到这一点!
  • @Wintér 没有std::vector 有很多方法可以做到这一点,但这是最简单的解决方案。如果您拒绝使用标准库,您可以使用 new[]delete[] 侥幸逃脱,但不建议这样做。
  • @FrançoisAndrieux 内存管理将花费更多时间,我现在将使用矢量,无论如何谢谢!

标签: c++


【解决方案1】:

为什么不使用向量?

std::vector<int> a(size);

同样在 C++ 中,您不能用这样的变量定义数组。

替代方案:

int* a = new int[size];
// Do stuff
delete [] a;

【讨论】:

  • 在 C 中可以。在 C++ 中你不能。 C/C++ 不是一回事。
  • C允许可变长度数组。但不在C++ 中。
  • C99 将 VLA 作为强制功能,而在 C11 中它是可选功能。
  • 我没有使用向量,因为我正在通过一个旧的 youtube 系列学习,我自己编写了所有内容(这是一个检测二进制搜索会进行多少次迭代和线性迭代的程序),直到我想出了这个问题,他把他的代码留在了粘贴中,所以我复制了它,当它仍然不起作用时,我只是在这里问
  • @Wintér 一些编译器允许 VLA 作为扩展,但这不是标准的。如果您的教师使用它们时至少没有免责声明,我强烈建议您寻找新的指导来源。
猜你喜欢
  • 2019-06-12
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
  • 2017-03-28
  • 2020-09-03
  • 2014-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多