Дело в том, что массивы, выделенные с помощью «классического» синтаксиса (например, int a [5]), выделяются в стеке. Поэтому во время компиляции вам нужно знать, насколько велик массив, поскольку компилятору необходимо изменить значение SP (указатель стека). С другой стороны, область памяти вектора находится в куче, например массивы, выделенные через malloc/new. Поэтому вы можете подождать до времени выполнения, узнать, сколько памяти вам нужно, и распределить ее соответственно.
Выделение стека/vs имеет также другие плюсы и минусы: распределение стека происходит быстрее, так как вам просто нужно уменьшить значение регистра, но стек ограничен по размеру, и если ваш массив слишком велик, вы получите с исключением переполнения стека, что может привести к появлению странных вещей, например, создание червоточины, сбрасывающей весь этот сайт на ваш HDD :-). Куча с другой стороны медленнее, и слишком много выделений/освобождений может привести к фрагментации памяти.
Вы не можете. Размер массивов на C++ должен быть известен во время компиляции. Зачем вам это нужно? Просто продолжайте использовать вектор. Если вам нужен базовый массив, либо выполните '& data_obj [0]', либо вызовите 'data_obj.data()'. – Borgleader
Я просто пытаюсь установить размер массива равным размеру вектора, поэтому всякий раз, когда векторные данные увеличивают размер массива, приспосабливайтесь к нему. –
@ArsalanSherwani ... массивы не настраиваются. Это то, что означает 'std :: vector' (и почему вы обычно используете его вместо этого). – crashmstr