std::vector
не фиксированный размер, поэтому, если нет элементов в нем, size
вернется 0
и пустой вернется true
.
std::vector<int> v;
auto sz = v.size(); // sz has value 0
auto e = v.empty(); // true
v.push_back(42);
sz = v.size(); // 1
e = v.emi empty(); // false
Вы также можете удалить элементы (вектор перемещает все элементы followingv вниз, чтобы заполнить пробел)
std::vector<int> v { 1, 2, 3 };
auto it = v.find(2);
if (it != v.end())
v.erase(it); // v now contains 1, 3
Таким образом, в теории, ни вам не нужно ставить nullptr
в твоих вектор. Это предполагает, что вы разработали свое приложение таким образом, чтобы не требовался определенный размер популяции в вашем векторе; если это так, то вектор не может быть правильным контейнером. Рассмотрим std :: array.
Существует проблема с вашим вектором рендеринга: векторные магазины экземпляры из Renderable
. Элементы I являются вектором точно размера Renderable. Поэтому, если вы попытаетесь сохранить производный класс, например Mesh
, вы потеряете дополнительные поля производных классов.
Это называется нарезкой.https://en.m.wikipedia.org/wiki/Object_slicing
Вам нужно будет хранить указатели или ссылки на экземпляры объектов. Это зависит от продолжительности жизни и владения экземплярами.
Если вашему вектору принадлежат исправления, вы можете использовать std::vector<std::unique_pre<Remediable>>
.
Если вам даны экземпляры вашего звонящего, возможно, std::shared_ptr
.
Если у вас нет подструктур, не помещайте * ничего * в вектор. – Galik
Если вам нужно спросить, подходит ли нулевой указатель на вашем графике, тогда у вас будет плохое время. –