Создание массива динамического размера с использованием компилятора MSVC C ++ - PullRequest
0 голосов
/ 12 июня 2019

Я использую Visual Studio 2013 Express и компилятор MSVC.

Я получаю сообщение об ошибке при выполнении следующих строк кода.

#include<iostream>
using namespace std;
int main()
{
     int n;
     cin>>n;
     int a[n];
     return 0;
}

Он говорит, что выражение должно иметь постоянное значение в строке, в которой я объявляю массив a. Я искал и нашел этот массив c ++ - выражение должно иметь постоянное значение

В нем говорится, что вам нужно включить опцию компилятора, чтобы разрешить это. Как установить этот параметр в Visual Studio Express?

Ответы [ 2 ]

4 голосов
/ 12 июня 2019

Вы можете использовать указатели

int*a = new int [n];

Вы должны удалить, прежде чем выходить из области действия a:

delete[] a;

Но лучше использовать вектор:

vector<int> a(n);

Вы также можете использовать llvm smallvector, который оптимизирован для небольших массивов без выделения кучи, если размер был небольшим

llvm::SmallVector<int, 5> smallVector;
 for(int i = 0; i < 5; i++) { 
    smallVector.push_back(i); } // No heap allocations have been performed up to this point.
     smallVector.push_back(6); // heap allocation now

Но имейте в виду, что компилятор сам решит, где разместить. Smallvector

0 голосов
/ 12 июня 2019

попробуйте следующее:

#include<iostream>
using namespace std;
int main()
{
    int n;
    cin >> n;
    int *a=new int[n];
    delete[] a;
    return 0;
}

способ, которым вы это делаете, распределяется в стеке и для этого он должен быть постоянным, тогда как таким образом он находится в куче и может иметь любое значение.

Я не думаю, что есть опция компилятора, чтобы изменить это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...