2014-01-04 6 views
0

Предположим, что в одной задаче, мы должны объявить массив п размера, где 1 <= n <= 1000000000разница между методами инстанцировании массива

Есть два (может быть больше) способов сделать это:

  1. int arr[1000000001]; и может работать с пространством по мере необходимости в соответствии с вводом.
  2. Можно сначала спросить пользователя размер массива, а затем создать экземпляр массива:

    CIN >> п; int arr [n];

Я хочу знать, каковы преимущества и недостатки обоих методов.

ответ

4

Разница в двух методов состоит в том, что:

Первый метод является стандартным совместимым, а второй не является стандартом. Массивы переменной длины не допускаются стандартом C++. Они поддерживаются компиляторами в качестве расширений, но использование не переносимо в строгом смысле.

Риск с первым методом заключается в том, что может не хватать места для стека или потерять память, хотя это не требуется. Лучшим решением в этом случае является использование std::vector.

+0

Какой из них будет быстрее между ними? Векторы не так быстро, как массивы, поэтому вы не можете идти с этой опцией всегда. – user3159685

+0

@ user3159685 Вы ​​действительно оценили свою программу, чтобы узнать, вызывает ли тип массива узкое место? Если нет, то не беспокойтесь об этом (во всяком случае, 'vector :: operator []' будет оптимизирован для одной инструкции арифметики указателя + загрузки или хранения с использованием любого современного, достойного компилятора и реализации stdlib). Если, однако, это ** фактически ** является узким местом, то вы всегда можете пойти с 'operator new'. –

Смежные вопросы