Это происходит потому, что размер статических массивов должен быть известен во время компиляции .
Настоятельно рекомендуется использовать std :: vector вместо массивов для большей гибкости и безопасности (это всегда ответ: используйте vector
, если это возможно). Вы можете использовать std :: vector :: reserve , чтобы запросить емкость как минимум той длины, которую вы хотите. Используйте std :: vector ::acity , чтобы увидеть текущую емкость.
#include <iostream>
#include <vector>
int main () {
std::vector<int> ivec;
ivec.reserve(100);
std::cout << ivec.capacity() << std::endl;
return 0;
}
Выход:
100
Только если у вас есть очень хорошая причина для предпочтения массивов над векторами, вы можете динамически распределять массив. Использование std :: shared_ptr делает этот процесс намного более безопасным и удобным. Вот как это делается так, как вы хотите:
#include <iostream>
#include <memory>
int main () {
int N;
std::cin >> N;
std::shared_ptr<int> arr_ptr (new int[N], std::default_delete<int[]>());
for (int i = 0; i != N; ++i) {
arr_ptr.get()[i] = i * 2;
}
for (int i = 0; i != N; ++i) {
std::cout << arr_ptr.get()[i] << std::endl;
}
return 0;
}
Введите:
10
Выход:
0
2
4
6
8
10
12
14
16
18