Это вектор, который я создал;
std::vector<std::vector<Vertex*>*> Vertices;
И мне трудно понять, как отодвинуть std::vector<Vertex*>
во внешнее
вектор.
Так что я пытаюсь сделать это:
Vertices.push_back(new vector().push_back(new Vertex()));
но я не уверен, что это правильно. Надеюсь, вы, люди, поняли идею.
Хотя иногда можно создавать вектор указателей (предпочтительно умных указателей), создание указателей на векторы никогда не является хорошей идеей: это усложняет управление вашей памятью без всякой уважительной причины.
Лучшее решение — использовать вектор объектов вершин, например так:
std::vector<std::vector<Vertex> > vertices;
Это позволит вам отодвинуться так:
vector<Vertex> vv;
vv.push_back(Vertex(...));
vertices.push_back(vv);
Если вы хотите вектор потомков Vertex
с полиморфным поведением, используйте вектор векторов указателей:
std::vector<std::vector<Vertex*> > vertices;
...
vector<Vertex*> vv;
vv.push_back(new Vertex(...));
vertices.push_back(vv);
Обратите внимание, что если вы делаете это, вы находитесь на крючке для освобождения Vertex
объекты внутри вектора. Лучшим решением было бы использование умных указателей — скажем, unique_ptr
, как это:
std::vector<std::vector<unique_ptr<Vertex> > > vertices;
unique_ptr
позаботится о освобождении Vertex
объекты автоматически.
Вы не можете сделать это в одной строке. Но вы можете сделать это в 4;
std::vector<std::vector<Vertex*>*> Vertices;
std::vector<Vertex*> * vec = new std::vector<Vertex*>;
vec.push_back(new Vertex()); // fill the inner vector as many times as you need
Vertices.push_back(vec);
Но почему вы хотите это сделать? Вы потеряете память, если не будете звонить delete
для каждого элемента внешнего вектора, но перед этим вам нужно будет вызвать delete
на каждом Vertex*
во внутренних векторах.
Изменить: для лучшего способа хранения Vertex без утечки памяти посмотрите ответ dasblinkenlight.