2016-07-01 6 views
0
class graph 
{ 
    vector<int > a[]; 
    int nodes,edges; 

public: 
    graph(int n,int m) 
    { 
     nodes=n;edges=m; 
     a = new vector<int> [n]; 
    } 
}; 

Это фрагмент кода. Как изменить размер array от vector<int>? Я попытался динамически назначить размер. Но это дает ошибку.Изменение размера массива вектора

+5

vector > намного лучше – MORTAL

+3

Объявление 'vector a [];' недопустимо C++. –

+0

@ Cheersandhth.-Alf На самом деле это в некотором контексте, но в этом случае он объявляет переменную * «неполного типа объекта» *. – Holt

ответ

2

Использование 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].

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