Использование std::vector<std::vector<...>>
вместо «сырого» массива std::vector<...>
, а затем использовать .resize()
:
std::vector<std::vector<int>> a;
a.resize(n);
Это избавит вас от необходимости писать много шаблонного код (пользовательский деструктор, конструктор копирования, .. .), и будет гораздо меньше подверженности ошибкам, чем ваш фактический код.
Реальная проблема в вашем коде, что vector<int> a[]
не должна быть действительной в этом контексте: она объявляет переменную a
из «производного описателя-типа список массива неизвестных связанного ИНТ», который «неполный тип объекта», и вы не можете объявить объект незавершенного типа на НКУ, если добавить -pedantic
, вы получите предупреждение:.
предупреждение: ISO C++ запрещает массив нулевого размера «а» [-Wpedantic]
Но без -pedantic
, он объявляет std::vector<int> a[0]
, который не может быть назначен std::vector<int> *
и именно поэтому вы получите ошибку при назначении new std::vector<int> [n]
.
vector> намного лучше –
MORTAL
Объявление 'vector a [];' недопустимо C++. –
@ Cheersandhth.-Alf На самом деле это в некотором контексте, но в этом случае он объявляет переменную * «неполного типа объекта» *. – Holt