C ++ Отодвинуть вектор в вектор

Это вектор, который я создал;

std::vector<std::vector<Vertex*>*> Vertices;

И мне трудно понять, как отодвинуть std::vector<Vertex*> во внешнее
вектор.

Так что я пытаюсь сделать это:

Vertices.push_back(new vector().push_back(new Vertex()));

но я не уверен, что это правильно. Надеюсь, вы, люди, поняли идею.

1

Решение

Хотя иногда можно создавать вектор указателей (предпочтительно умных указателей), создание указателей на векторы никогда не является хорошей идеей: это усложняет управление вашей памятью без всякой уважительной причины.

Лучшее решение — использовать вектор объектов вершин, например так:

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

Другие решения

Вы не можете сделать это в одной строке. Но вы можете сделать это в 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.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector