Конечно, использование std::vector<std::vector<int>>
, вероятно, не то, что вы хотите; D.
Что касается проблемы в вашем коде - вы сохраняете целые числа в Vector:
int* a; // int a[];
и Вы сохраняете Векторы в Матрице
Vector* v; // Vector v[]
, но в своем конструкторе вы пытаетесь каждый раз выделять новый вектор, поэтому для согласованности вы должны добавить одну звезду в объявлении v:
Vector** v; // Vector* v[];
...
Matrix(int lin, int col)
{
v = new Vector*[lin];
for(int i = 0; i < lin; i++)
{
v[i] = new Vector(col);
}
}
В качестве альтернативы вы можете использовать немного более сложное решение, оставить объявление v в том виде, в каком оно есть сейчас, и использовать новое размещение:
Vector* v; // Vector v[]
...
Matrix(int col, int lin) // what if somebody mixes order of col and lin?
{
// watch out for alignment if you do such tricks!!!
v = reinterpret_cast<Vector*>(new char[sizeof(Vector)*lin]);
for(int i = 0; i < lin; i++)
{
new (v+i) Vector(col);
}
}
Конечно, не забывайте о деструкторах, безопасности исключений и и так далее ...